关键词:挑战应答认证
https://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication假设某用户的密码是 abcdefg ,客户端先生成一个随机数,比如 123456 ,并发送给服务器。
中间人拦截到了,没关系,服务器也收到了这个随机数,随后,服务器也生成一个随机数,比如 654321 ,然后也发送给客户端。同样,中间人也拦截到了,一样没关系。
客户端,服务器和中间人都知道客户端的随机数是 123456 ,服务器的随机数是 654321 。
现在,客户端使用 md5("123456abcdefg654321") 进行散列,得出一个MD5:500908fd00948ac2cc7b096315d41ff7,并直接将MD5发送给服务器。
同样,中间人也拦截到了,但是中间人并不知道这个MD5是什么,无法解密。
服务器收到后,从数据库读取用户的密码,用收到的随机数同样进行一次相同的散列过程,进行比较。
结果一致,OK,认证通过。