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())  

  

 

 

 

最终结果

 

 

posted on 2020-04-08 17:09  烟雨梦情  阅读(413)  评论(0)    收藏  举报