MySQL原生密码认证过程(附图)

转载-宋利兵的微信公众号,只看文字相信有些同学会晕,所以画了张图。
解释如下:
1,mysql.user表中存储的是两次sha1加密过后的stage2hash,这个是无法反解密到passwd的。
2,每次客户端链接过来,在进行密码验证时,mysqld会发送随机字符串scramble到客户端。并且mysqld会利用stage2hash+scramble进行一次sha1操作,生成一个key。
3,客户端利用用户输入的passwd生成stage2hash,再加上mysqld发送过来的scramble进行一次sha1操作,生成和mysqld相同的key。然后再拿这个key和stage1hash进行一次xor操作,生成ciphertext,发送给mysqld
4,mysqld拿到客户端发送的ciphertext,加上之前生成的key,进行一次xor逆向操作,解密出stage1hash,再对stage1hash进行一次sha1操作,生成stage2hash,再拿着这个stage2hash和mysql.user表中存储的信息对比,如果一致,则此次密码认证通过。

image_1ciquhe0510k4fkcj0g80l16vi9.png-156.9kB

猜你喜欢

转载自blog.csdn.net/sun_ashe/article/details/81130188