有时候忘记mysql密码了,需要重启服务去重设密码, 这太麻烦了. 所以有没得办法不重启修改密码呢?
我最先想到的是 既然我们已经知道了mysql的连接过程, 那么我们就可以自定义密码字段了.
mysql native_password 存储的是两次hash(sha1)之后的值.
每次client连接server的时候, server都会返回一个随机生成的salt (每次连接都不一样, 即使是同一个用户同一时间). 客户端根据该salt给密码加密, 然后发送到server

在mysql上可以使用sha1查看

server生成随机salt (generate_user_salt)
client 返回 第一次hash值 对第二次hash值加salt 的异或
hash_stage1 = sha1("password")
hash_stage2 = sha1(hash_stage1)
xor(hash_stage1, sha1(salt,hash_stage2)) #xor异或 符号: ^ server 收到返回的值后, 对 sha1(salt,hash_stage2) 做异或得到 hash_stage1 , 然后对hash_stage1 做sha1得到第二次hash之后的值, 然后和hash_stage2做比较
hash_stage1 = xor(reply, sha1(salt,hash_stage2)) #客户端发来的加密数据
hash_stage1 = sha1(hash_stage1)也就是说 实际上发送的是第一次hash之后的值....
所以我们只有第二次hash的值是不能登录mysql的
我还幸幸苦苦解析半天MYD文件, 得到hash两次之后的值...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。