MD5码

1,MD5是一种加密方法。通过对一段信息码加密后,可以生成固定长度(128bit)的MD5码。该MD5码理论上来说应该是全球唯一的。

2,算法原理。1),填充编码。在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

    2),根据填充好的信息码,进行如下算法流程计算,即可生成固定长度(128bit)的MD5码。

3,算法流程。

算法实现:

如右图,一个MD5运算由类似的64次循环构成,分成4组16次。F 一个非线性函数;一个函数运算一次。Mi 表示一个 32-bits 的输入数据,Ki表示一个 32-bits 常数,用来完成每次不同的计算。
主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向左环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。
以下是每次操作中用到的四个非线性函数(每轮一个)。
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))
       (&;是与,|是或,~是非,^是异或)
具体这64次循环(分4轮)过程函数如下:

第一轮:(MD5一共4轮)
FF(a,b,c,d,M0,7,0xd76aa478)
  FF(d,a,b,c,M1,12,0xe8c7b756)
  FF(c, d, a, b, M2,17, 0x242070db)
  FF(b,c,d,a,M3,22,0xc1bdceee)
  FF(a,b,c,d,M4,7,0xf57c0faf)
  FF(d,a,b,c,M5,12,0x4787c62a)
  FF(c,d,a,b,M6,17,0xa8304613)
  FF(b,c,d,a,M7,22,0xfd469501)
  FF(a,b,c,d,M8,7,0x698098d8)
  FF(d,a,b,c,M9,12,0x8b44f7af)
  FF(c,d,a,b,M10,17,0xffff5bb1)
  FF(b,c,d,a,M11,22,0x895cd7be)
  FF(a,b,c,d,M12,7,0x6b901122)
  FF(d,a,b,c,M13,12,0xfd987193)
  FF(c, d, a, b, M14,17, 0xa679438e)
  FF(b,c,d,a,M15,22,0x49b40821)
  第二轮
  GG(a,b,c,d,M1,5,0xf61e2562)
  GG(d,a,b,c,M6,9,0xc040b340)
  GG(c,d,a,b,M11,14,0x265e5a51)
  GG(b,c,d,a,M0,20,0xe9b6c7aa)
  GG(a,b,c,d,M5,5,0xd62f105d)
  GG(d,a,b,c,M10,9,0x02441453)
  GG(c,d,a,b,M15,14,0xd8a1e681)
  GG(b,c,d,a,M4,20,0xe7d3fbc8)
  GG(a,b,c,d,M9,5,0x21e1cde6)
  GG(d,a,b,c,M14,9,0xc33707d6)
  GG(c,d,a,b,M3,14,0xf4d50d87)
  GG(b,c,d,a,M8,20,0x455a14ed)
  GG(a,b,c,d,M13,5,0xa9e3e905)
  GG(d,a,b,c,M2,9,0xfcefa3f8)
  GG(c,d,a,b,M7,14,0x676f02d9)
  GG(b,c,d,a,M12,20,0x8d2a4c8a)
  第三轮
  HH(a,b,c,d,M5,4,0xfffa3942)
  HH(d,a,b,c,M8,11,0x8771f681)
  HH(c,d,a,b,M11,16,0x6d9d6122)
  HH(b,c,d,a,M14,23,0xfde5380c)
  HH(a,b,c,d,M1,4,0xa4beea44)
  HH(d,a,b,c,M4,11,0x4bdecfa9)
  HH(c,d,a,b,M7,16,0xf6bb4b60)
  HH(b,c,d,a,M10,23,0xbebfbc70)
  HH(a,b,c,d,M13,4,0x289b7ec6)
  HH(d,a,b,c,M0,11,0xeaa127fa)
  HH(c,d,a,b,M3,16,0xd4ef3085)
  HH(b,c,d,a,M6,23,0x04881d05)
  HH(a,b,c,d,M9,4,0xd9d4d039)
  HH(d,a,b,c,M12,11,0xe6db99e5)
  HH(c,d,a,b,M15,16,0x1fa27cf8)
  HH(b,c,d,a,M2,23,0xc4ac5665)
  第四轮
  Ⅱ(a,b,c,d,M0,6,0xf4292244)
  Ⅱ(d,a,b,c,M7,10,0x432aff97)
  Ⅱ(c,d,a,b,M14,15,0xab9423a7)
  Ⅱ(b,c,d,a,M5,21,0xfc93a039)
  Ⅱ(a,b,c,d,M12,6,0x655b59c3)
  Ⅱ(d,a,b,c,M3,10,0x8f0ccc92)
  Ⅱ(c,d,a,b,M10,15,0xffeff47d)
  Ⅱ(b,c,d,a,M1,21,0x85845dd1)
  Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)
  Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0)
  Ⅱ(c,d,a,b,M6,15,0xa3014314)
  Ⅱ(b,c,d,a,M13,21,0x4e0811a1)
  Ⅱ(a,b,c,d,M4,6,0xf7537e82)
  Ⅱ(d,a,b,c,M11,10,0xbd3af235)
  Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb)
  Ⅱ(b,c,d,a,M9,21,0xeb86d391)


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值