MD5
处理分组长度:512
输出:128位消息摘要
对输入明文初始化
每一个分组又被划分为16个32位子分组
输出由4个32位分组组成
4个32分组串联后生成一个128位散列值
即从512位信息中抽取信息摘要128位

原始消息填充并以512位划分为一组,先填充一个1,若干个0(总共填充消息长度为(512-64-(k mod 512))mod 512)
附加长度:将原消息长度的64位表示附加在填充后的消息后面,当原消息长度大于2^64次方时,用消息长度mod 2^64填充。这时总长度恰好时512的整数倍,令M[0 1 ... N-1]为填充后消息的各个字(每字为32位),N是16的倍数
初始化缓冲区:用于计算消息摘要的128位的缓冲区。这个缓冲区由四个32位寄存器ABCD表示,初始值为

主循环:
(1)将填充后信息按512位分为1块(Block),每块按32位为一组划分成16个分组
(2)分别对每一块信息进行4轮计算, 每一轮定义一个非线性函数.

ABCD,1234轮运算后和原始ABCD的结果做二进制+运算。Yq为512位,CVq为前一组的hash值为128位 即:第一步:Y0----(H(Y0))---->得到CV1,Y1----(H(Y1,CV1))---->得到CV2,以此类推。
ABCD每一轮进行了16次操作
每次操作对ABCD四个缓冲区中的值通过非线性函数运算。
bcd作为输入,与a做+法运算,再和分组Mj做+法运算,再和常熟ti做+法运算,所得值循环左移不定数s。结果再和b做+法运算放入b,一下轮a的结果是原有D的结果,c的结果是原有b的结果,d的结果是原有c的结果

j:0-15,i:1-64
非线性函数(输入输出分别为)

Ti=2^32*abs(sini())

最终结果


浙公网安备 33010602011771号