MD5
# MD5
# 简介
md5是一种信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128bit(16bytes)的散列值,用来确保信息传输完整一致性。
# 算法过程
- 将待hash的信息进行预处理
- MD5将待加密的消息分割成每512位为一个分组,得到以下公式
N∗512+R
1
- 其中R是剩余信息的位位数
- 当R=0时,需要单独补上一个512位的分组
- 当R < 448时,需要补位到448位,再在其后面添加64位消息长度的二进制
- R >= 448时,除了补满这一个512位分组外,还需要再补一个512位的分组
初始化MD缓存器
MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。该缓存器又可看成是4个32位的寄存器A、B、C、D,小端序分为别:
A = 0x67452301 B = 0xefcdab89 C = 0x98badcfe D = 0x10325476
1
2
3
4循环处理分组数据段
定义4个非线性函数F、G、H、I,对输入的报文运算以512位数据段为单位进行处理。对每个数据段都要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位)
F(X,Y,Z)=(X&Y)|((~X)&Z) G(X,Y,Z)=(X&Z)|(Y&(~Z)) H(X,Y,Z)=X^Y^Z I(X,Y,Z)=Y^(X|(~Z))
1
2
3
4每次进入一个512位的分组,循环执行四种操作,每种操作执行16次,具体如下:当第一组512位的分组进来后
- 0-15轮使用F函数进行处理
- 16-31轮使用G函数进行处理
- 32-47轮使用H函数进行处理
- 48-63轮使用I函数进行处理
处理完毕后获得新的中间值a、b、c、d,其中b是A、B、C、D左移S位得到的,使用该值更新原始的A、B、C、D,继续对下一个512位的分组进行处理,直到所有的块都处理完毕后,将最终的A、B、C、D进行顺序级联,就是消息的128位hash值
上次更新: 2022/07/21, 22:10:28