首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >能否使用加密后的密码登录mysql

能否使用加密后的密码登录mysql

原创
作者头像
大大刺猬
发布2023-03-23 17:10:55
发布2023-03-23 17:10:55
3.4K0
举报
文章被收录于专栏:大大刺猬大大刺猬

有时候忘记mysql密码了,需要重启服务去重设密码, 这太麻烦了. 所以有没得办法不重启修改密码呢?

我最先想到的是 既然我们已经知道了mysql的连接过程, 那么我们就可以自定义密码字段了.

基础知识

mysql native_password 存储的是两次hash(sha1)之后的值.

每次client连接server的时候, server都会返回一个随机生成的salt (每次连接都不一样, 即使是同一个用户同一时间). 客户端根据该salt给密码加密, 然后发送到server

在mysql上可以使用sha1查看

加解密原理

server生成随机salt (generate_user_salt)

加密

client 返回 第一次hash值 对第二次hash值加salt 的异或

代码语言:python
复制
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做比较

代码语言:javascript
复制
hash_stage1 = xor(reply, sha1(salt,hash_stage2)) #客户端发来的加密数据
hash_stage1 = sha1(hash_stage1)

总结

也就是说 实际上发送的是第一次hash之后的值....

所以我们只有第二次hash的值是不能登录mysql的

我还幸幸苦苦解析半天MYD文件, 得到hash两次之后的值...

也不算白写吧, 好歹能获得加密后的值.... 虽然没啥用了
也不算白写吧, 好歹能获得加密后的值.... 虽然没啥用了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础知识
  • 加解密原理
    • 加密
    • 解密
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档