理论知识部分摘录自:

http://blog.chinaunix.net/uid-9234131-id-5088292.html

http://blog.csdn.net/sissiyinxi/article/details/7660389

1.服务器端会随机生成一个random string发送给客户端;

2.客户端收到random string后,进行hash加密

第一步,将密码hash,得到hash值hash_stage1;  eg.hash_stage1=sha1("password");

第二步,二次hash,得到hash_stage2;  eg. hash_stage2=sha1(hash_stage1);

第三步,将密码二次hash得到的值与random string进行hash,得到hash_stage3; eg. hash_stage3=sha1("randomstring",hash_stage2);

第四步,异或处理准备发送给服务器端,得到reply=xor(hash_stage1,hash_stage3);

最后,将reply的值发送给服务器端。

3.服务器端收到reply后同样进行hash运算

第一步,将保存的hash形式的密码hashpassword与random string进行hash,得到server_hash_stage1=sha1("randomstring","hashpassword");

第二步,将客户端发送的reply与刚才得到的hash值进行异或运算,得到xor_value;eg. xor_value=xor(reply,server_hash_stage1);

第三步,将得到的异或值进行hash,得到server_hash_stage2;eg. server_hash_stage2=sha1(server_hash_stage1);

第四步,验证,将最后得到的hash值server_hash_stage2与保存的密码hashpassword进行比较。eg.   server_hash_stage2==hashpassword,相等则验证通过。

下图是我从mysql5.7.22代码里面截取的伪代码:

官方文档:

MySQL uses passwords in two phasesof client/server communication:

When a client attempts to connectto the server, there is an initial authentication step in which the client mustpresent a password that has a hash value matching the hash value stored in theuser table for the account the client wants to use.

After the client connects, it can(if it has sufficient privileges) set or change the password hash for accountslisted in the user table. The client can do this by using the PASSWORD()function to generate a password hash, or by using a password-generatingstatement (CREATE USER, GRANT, or SET PASSWORD).

> SELECT PASSWORD('Abcd@1234');   # mysql用户密码的计算方式:(hash方式)

+-------------------------------------------+

| PASSWORD('Abcd@1234')                     |

|-------------------------------------------|

|*47B150E012313114C04A1C9336709424085B6BD0 |

+-------------------------------------------+

使用wireshark抓取通过navicat登录虚拟机的mysql-5.7的部分截图:

第5~7个包是三次握手包。

第8个包:

server告知客户端,当前服务器的字符集、认证使用的插件。并将随机生成的一个salt值发给client。

第9个包:

client端收到server端发来的salt值,然后使用salt值和本地的登录密码生成一个新的随机串,然后将新的串发往服务端(就是上图中的dd249f24....这串字符串)。服务端check字符串反解析。

第10个包,是server-->client的ACK包。

第11个包开始及之后的一些packet就是client server之间的通讯了。

mysql登录抓包_MySQL登录验证的抓包相关推荐

  1. mysql认证包_mysql协议分析2---认证包

    主人看到navicat和mysql在那嘻嘻哈哈,眉来眼去的,好不快乐,忽然也想自己写个程序,直接去访问Mysql,虽然现在已经有很多现成的中间件可以直接拿来用了,程序只要负责写sql语句就行了,但是主 ...

  2. 为什么mysql打开闪屏_mysql登录闪屏问题解决办法

    Mysql安装后打开MySQL Command Line Client闪退解决方法 //MySQL的启动方法,先在DOS下切换到mysql的安装目录BIN下然后输入启动mysql服务的命令, 再然后在 ...

  3. MySQL中登录报错_mysql登录报错 ERROR 1045 (28000)

    1.现象: [root@localhost ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for use ...

  4. mysql身份证校验码_mysql正则表达式验证身份证,并获取年龄、生日、性别

    mysql正则表达式验证身份证,并获取年龄.生日.性别 发布时间:2018-05-17 16:28, 浏览次数:4844 , 标签: mysql正则表达式,mysql验证身份证,REGEXP mysq ...

  5. Bootstrap4+MySQL前后端综合实训-Day06-AM【eclipse详细配置Tomcat、开发web项目、servlet、连接MySQL8.0数据库、用户登录界面的编写与验证、分页查询】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 eclipse重置视图 MySQL数据库--建数据库.建数据库 s ...

  6. mysql 登录默认实例_【MySQL案例】mysql本机登录-S失灵_mysql

    [mysql案例]mysql本机登录-S失效 1.1.1. mysql本机登录mysql时,-S参数失效 [环境描述] mysql5.5.14 [问题描述] 配置了多实例 实例1 实例2 datadi ...

  7. mysql登录不用输密码登录_mysql实现不用密码登录的实例方法

    具体方法: 第一步:停止mysql服务 /etc/init.d/mysqld stop 第二步:跳过密码验证 /usr/bin/mysqld_safe --skip-grant-tables 或 my ...

  8. mysql 创建端口号_MySQL命令行 不同端口登录 执行SQL文件 创建用户 赋予权限 修改root密码...

    0.安装MySQL服务 1.[不同端口登录] 通过开始菜单-> 程序-> MySQL-> MySQL Command Line Client 通过输入密码Enter password ...

  9. mysql一直拒绝登录_mysql 登录错误:1045 (28000)访问被拒问题

    关键条目:ERROR 1045(28000): Access deniedforuser'root'@'localhost'(using password: YES) 这个错误1045(28000)的 ...

最新文章

  1. Linux Kernel TCP/IP Stack — Overview
  2. gfnormal 域名 是阿里云的高防IP
  3. 《转载》Tomcat内存设置详解
  4. Nuxt项目中使用axios
  5. python 回车字符_「答案」python每日一题20201107
  6. python 爬虫爬不出来_爬虫爬不进下一页了,怎么办
  7. 安装windows2003+SQL Server2005集群
  8. python 清空所有对象_学习python第38天
  9. 怎么判断当前的os类型,手机类型
  10. jquery ajax 防止浏览器缓存
  11. glassfish_多种监视和管理GlassFish 3的方法
  12. Python | 从用户输入数据,保存到文件,读取并打印
  13. Runner站立会议05
  14. 刷爆抖音,评分9.7!这本Python书太酷了!程序员:太爱!
  15. flash mx拖拽实例_Flash MX 2004的注释添加器面板
  16. 在同一个数据集中同时更新多表..............
  17. C语言程序设计(郝斌)
  18. 线性代数考研笔记(二)
  19. iOS 闪光的按钮,流光动画,iPhone经典滑动解锁动画
  20. JVM是怎么和操作系统交互的?

热门文章

  1. pytorch运行遇到的问题_如何解决吸塑机在运行中遇到真空度的问题
  2. 计算机成绩统计优秀率,基于决策树算法的成绩优秀率分析与研究.pdf
  3. java子网划分_子网划分讲解及练习(二)
  4. Activity(活动)之Intent(意图)(显式与隐式)的使用
  5. 小农民在深山树林里发现古墓_河南周口一个县,总人口125万,境内有27处古墓群...
  6. numpy 笔记:finfo
  7. 论文笔记 Bayesian Probabilistic Matrix Factorizationusing Markov Chain Monte Carlo (ICML 2008)
  8. 经典!MATLAB线性等分linspace()函数,精确等分点数
  9. Tableau必知必会之妙用Fixed函数聚合分析维度
  10. Tableau必知必会之如何用颜色 突显 前N项和后N项