HASH和HMAC(2):MD5算法原理

MD5由美国密码学家Ronald Linn Rivest设计,于1992公开,用以取代MD4算法,在RFC 1321标准被加以规范。1996年该算法被证实存在弱点,可以被破解。2004年证实MD5无法防止碰撞,因此不适用于安全性认证。

MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

MD5协议标准:RFC 1321: The MD5 Message-Digest Algorithm

MD5算法处理分如下几步:

  • 消息填充 

消息填充分为两部分:第一部分是附加填充比特,第二部分是附加长度,目的是让整个消息满足指定的结构,从而处理起来可以统一化、格式化。

附加填充比特:指在消息尾部进行填充,使报文长度在对512取模后的余数为448。具体操作是:先被1比特1,然后都被0,直到满足对512取模余448。需要注意的是:即使原始消息长度已经满足对512取模余448,补位也需要进行,这时地填充512比特。所以附加填充时至少补1位,最多补512位。

附加长度:将原始数据的长度信息补到已经进行了填充的消息后面。

  • 消息分组

消息分组指将消息填充后的数据按512bit进行分组。

消息填充和消息分组处理图示如下:

  •  迭代运算

MD5算法对输入的消息进行4轮迭代运算,并输出128bit的HASH结果。

 MD5处理过程中会用到4个哈希初值和64个哈希常量。

4个哈希初值:A=0x67452301,B=0xEFCDAB89,C=0x98BADCFE,D=0x10325476。

64个哈希常量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

 MD5迭代运算详细流程为:

哈希初值赋值:

H0=A=0x67452301,H1=B=0xEFCDAB89,H2=C=0x98BADCFE,H3=D=0x10325476

第一轮:FF(a,b,c,d,k,s,j)

a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s,其中:F(b,c,d) = (b & c) | (~b & d)

第二轮:GG(a,b,c,d,k,s,j)

a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s,其中:G(b,c,d) = (b & d) | (c & ~d)

第三轮:HH(a,b,c,d,k,s,j)

a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s,其中:H(b,c,d) = b ⊕ c ⊕ d

第四轮:II(a,b,c,d,k,s,j)

a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s,其中:I(b,c,d) = c ⊕ (b | ~d)

结果输出:

H0=H0+A,H1=H1+B,H2=H2+C,H3=H3+D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值