哈希加密算法 - MD5

哈希加密算法 - MD5

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

原理

img

  • step 1:填充补齐

    • 将原始数据长度补齐成512bit的整数倍

    • 填充的bit中最后64bit用于表示原始数据长度

    • 其余填充bit中第一个bit为1,其余bit为0

  • step 2:分块

    • 若干512bit的数据块

    • 每个数据块又分为16个32bit的分组,方便逻辑运算

  • step 3:处理数据

    • 入口参数(IV,M),IV为初始幻数、M为512bit数据块

    • 定义四种逻辑运算

      [公式]

    • 定义了四种函数

      $$
      FF(a,b,c,d,M_i,s_j,t_k):~~~~~~a=b+((a+F(b,c,d)+M_i+t_k) <<< s_j)\\ GG(a,b,c,d,M_{ρ_1(i)},s_j,t_k):~~~~~~a=b+((a+G(b,c,d)+M_{ρ_1(i)}+t_k) <<< s_j)\\ HH(a,b,c,d,M_{ρ_2(i)},s_j,t_k):~~~~~~a=b+((a+H(b,c,d)+M_{ρ_2(i)}+t_k) <<< s_j)\\ II(a,b,c,d,M_{ρ_3(i)},s_j,t_k):~~~~~~a=b+((a+I(b,c,d)+M_{ρ_3(i)}+t_k) <<< s_j)\\ a,b,c,d分别为四种幻数\\ M_i为每一个32bit分组,M[16]\\ s_j为循环左移位数,s[16]\\ t_k为常量数组,t[4*16]\\ ρ(i)为一中次序置换函数
      $$

      每一次函数所完成的操作

      img

    • 初始幻数IV (A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210),计算机按小端序存储

    • s={
      7, 12, 17, 22,
      5, 9, 14, 20,
      4, 11, 16, 23,
      6, 10, 15, 21
      };
      t={
      0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,

      0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,

      0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,

      0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
      }
    • 每一轮函数共进行四次循环,每一次循环进行四次函数计算

      例:

      $$
      a=FF(a,b,c,d,M_i,s_j,t_k)\\ b=FF(d,a,b,c,M_{i+1},s_{j+1},t_{k+1})\\ c=FF(c,d,a,b,M_{i+2},s_{j+2},t_{k+2})\\ d=FF(b,c,d,a,M_{i+3},s_{j+3},t_{k+3})\\
      $$
    • 这样在计算的过程中(a,b,c,d)又被赋予了新的值,最后

      $$
      CV_{q+1}=CV_q+(a,b,c,d)
      $$

      作为下一数据块的初始幻数IV

  • step 4:如此往复,最后得到的CV值作为128bit的MD5值

posted @ 2022-05-11 21:08  wenchihchang  阅读(375)  评论(0)    收藏  举报