文件md5计算速度 md5加密算法原理及实现( 二 )

[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* 第三轮操作 */
/* [abcd k s t] 表示如下操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* 第四轮操作 */
/* [abcd k s t] 表示如下操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* 结束对i的循环 */
3.5 Step 5. 输出
上一步输出最终的结果A,B,C,D 。我们从A的低位字节开 , 到D的高位字节结束,每一个都是32位 , 最终拼接的结果就是4*32 = 128位,这就是MD5结算的结果 。
4.总结
MD5算法很容易实现,为任意长度的信息计算摘要信息 。据推测要实现两个不同的报文产生相同的消息摘要需要2^64次的操作,要恢复给定摘要的报文则需要2^128次操作 。MD5算法已经过非常细致的检查 。当然,最后的结论是还需要相关的更好的算法和更进一步的安全分析 。
当然,在1996年后该算法被证实存在弱点,可以被加以破解 。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证 。