2019独角兽企业重金招聘Python工程师标准>>>

上一节是收到了欢迎语,下面开始验证阶段。

=================================

首先上代码

@Override

public byte[] toByteArray() throws IOException {

ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int clientCapabilities = this.clientCapabilities;

if (clientCapabilities == 0) {

clientCapabilities = ClientCapabilities.LONG_FLAG |

ClientCapabilities.PROTOCOL_41 | ClientCapabilities.SECURE_CONNECTION;

if (schema != null) {

clientCapabilities |= ClientCapabilities.CONNECT_WITH_DB;

}

}

buffer.writeInteger(clientCapabilities, 4);

buffer.writeInteger(0, 4); // maximum packet length

buffer.writeInteger(collation, 1);

for (int i = 0; i < 23; i++) {

buffer.write(0);

}

buffer.writeZeroTerminatedString(username);

byte[] passwordSHA1 = "".equals(password) ? new byte[0] : passwordCompatibleWithMySQL411(password, salt);

buffer.writeInteger(passwordSHA1.length, 1);

buffer.write(passwordSHA1);

if (schema != null) {

buffer.writeZeroTerminatedString(schema);

}

return buffer.toByteArray();

}

===

具体解释如下:

长度作为3个字节写出,小端模式

然后后面跟1个字节的值,为1或者0,验证命令为1,其它为0.

然后开始写具体的一些内容如下:

clientCapabilities: 4个字节,小端模式

packet最大长度:4个字节,可以为0

collation:占1个字节。

然后写23个0,占23个字节,估计是保留位

用户名,以\0结束。

密码:密码分为2部分,长度先作为一个字节写出去,后面跟具体密码。

空密码为new byte[0].

否则需要做一个函数转换,具体代码如下:

/**

* see mysql/sql/password.c scramble(...)

*/

private static byte[] passwordCompatibleWithMySQL411(String password, String salt) {

MessageDigest sha;

try {

sha = MessageDigest.getInstance("SHA-1");

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

}

byte[] passwordHash = sha.digest(password.getBytes());

return xor(passwordHash, sha.digest(union(salt.getBytes(), sha.digest(passwordHash))));

}

======至此,发送验证命令完毕,下面开始读取响应。

这部分比较简单

1)3个字节,小端模式,表明长度

2)跳过1个字节的序列号

3)读取对应的值,值的第一个字节为0表示验证成功。0XFF表示错误,其它为未知异常。

这部分简单,不赘述。

转载于:https://my.oschina.net/qiangzigege/blog/540746

MySQL-Binlog解析篇:2 Authenticate相关推荐

  1. MySQL Binlog 解析工具 Maxwell 详解

    maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Goog ...

  2. log解析工具 px4_详解MySQL Binlog解析工具--binlog2sql,基于表级别的数据恢复

    概述 最近碰到某个表需要做数据回退,如果回退整个数据库动作又太大,所以用了binlog2sql来实现,这里先介绍一下binlog2sql的相关内容. binlog2sql是一个开源的Python开发的 ...

  3. MySQL Binlog解析

    概述 MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常--MySQL, VmTools MySQL关于Binlog的官方文档:The Binary Log 基于Binlo ...

  4. mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档

    原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http ...

  5. opentrace在mysql中使用_采用OpenReplicator解析MySQL binlog

    Open Replicator是一个用Java编写的MySQL binlog分析程序.Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析b ...

  6. mysql binlog 回退_MYSQL Binglog分析利器:binlog2sql使用详解

    大部分使用mysql的业务也都会开启binlog,用以记录数据库的更新操作.当然binlog的格式大家也都比较清楚,分别是statement.mixed.row模式.针对row格式的binlog,它以 ...

  7. binlog解析工具—my2sql

    文章目录 一.工具介绍 1.1 工具对比 1.2 用途 1.3 限制 1.4 性能对比 二.工具使用 2.1 参数说明 2.2 使用案例 一.工具介绍   my2sql是go版MySQL binlog ...

  8. MySQL Binlog 介绍

    Binlog 简介 MySQL中一般有以下几种日志: 日志类型 写入日志的信息 错误日志 记录在启动,运行或停止mysqld时遇到的问题 通用查询日志 记录建立的客户端连接和执行的语句 二进制日志 记 ...

  9. mysql binlog查看工具_【使用 Rust 写 Parser】4. 解析 binlog

    系列所有文章 PrivateRookie:[使用 Rust 写 Parser]1. 初识 nom​zhuanlan.zhihu.com PrivateRookie:[使用 Rust 写 Parser] ...

  10. 通过Maxwell解析MySQL Binlog,打好业务多活的基础

    这是学习笔记的第 2153 篇文章 在Binlog解析方向和数据流转方向上,经常会提到比较有名的几类工具,阿里的Canal,Zendesk的Maxwell和Yelp的mysql_streamer,他们 ...

最新文章

  1. 欧卡智舶发布全球首个城市内河无人驾驶数据集!
  2. DongLiORM 第二次更新
  3. 数据库 -- 由数据库连接池引出的三种设计模式
  4. 分布式Session框架
  5. Entityframework批量删除
  6. python有哪些游戏模块_python游戏模块 Pygame常用方法
  7. 链栈和递归实现迷宫算法
  8. 性能测试:基础(1)
  9. mysql服务没有权限开机不会自启动_计算机服务项里没有MySQL服务,无法设置开机自启动或者关闭自启动,的解决办法...
  10. bigint在java中用什么表示_即使我确信圣诞老人不存在,我却仍然每年给我的孩子们准备圣诞礼物,为什么?...
  11. 搭建自己的病毒扫描系统clamav-原版教程
  12. PowerMockito框架入门及使用
  13. webservice框架 java_java开发webservice的几种方式详解
  14. 迅雷:游移的4亿用户帝国
  15. python 暑期培训
  16. fatal: unable to access ‘https://github xxxxxxxxx的解决方法
  17. Correct the classpath of your application so that it contains a single, compatible version oforg.spr
  18. Statistics 基础之Hypothesis Tests1---t检验
  19. Win7更换锁屏壁纸
  20. python urllib之parse中urlencode、quote、unquote使用方法

热门文章

  1. 超越对手之四、五、六
  2. 正则表达式:元字符,量词
  3. RHEL6.3配置Apache服务器(2) 构建虚拟主机
  4. 苹果内购和 Apple Pay
  5. Wdatepicker日期控件的使用指南
  6. 关于Azure存储账户中存储虚拟机VHD文件的注意事项
  7. WebBrowser
  8. linux系统宿主定制之初窥门径
  9. Firefox beta 开始原生支持 Windows 10 ARM64
  10. 【MySQL】Dockerfile书写简单示例