数据安全之散列函数(四)- MD5 算法原理详解

在我们之前的文章中,我们探讨了MD4算法的细节。虽然在当前的技术环境下,MD4算法已经不被认为是安全的,但它仍然是现代大多数散列算法的基石。
现在广泛使用的多种散列算法都是基于MD4的原理进行改进和发展的。在本文中,我们将深入探讨MD4与其后继者MD5之间的关键差异,并详细介绍MD5算法。通过比较这两种算法,我们旨在揭示MD5如何在保持MD4核心理念的同时,增强了安全性和效率。
由于本文与上一篇密切相关,如果你还没阅读过 数据安全之散列函数(三)- MD4 原理 ,建议您先进行阅读。

计算轮数增加

计算轮次从原来的 3 轮增加到了 4 轮,既增加了 48 < = j < = 63 48<=j<=63 48<=j<=63的轮次。新的轮次的函数定义为:
第三轮函数 g g g改为 (B & D) | (C & ~D)。
新增第四轮函数 k k k为 C^ ( B | ~D)。

对常量进行变更

32-bit **附加值常量 ** y y y 由 2的平方根前32bit 变更为 a b s ( s i n ( j + 1 ) ) , 0 ≤ j ≤ 63 abs(sin(j + 1)), 0 ≤ j ≤ 63 abs(sin(j+1)),0j63 的值的前 32 个 bit,其中 j j j 为弧度。
**原始输入值访问顺序常量 ** z z z
z [ 16..31 ] = [ 1 , 6 , 11 , 0 , 5 , 10 , 15 , 4 , 9 , 14 , 3 , 8 , 13 , 2 , 7 , 12 ] z[16..31] = [1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12] z[16..31]=[1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12] z [ 32..47 ] = [ 5 , 8 , 11 , 14 , 1 , 4 , 7 , 10 , 13 , 0 , 3 , 6 , 9 , 12 , 15 , 2 ] z[32..47] = [5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2] z[32..47]=[5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2] z [ 48..63 ] = [ 0 , 7 , 14 , 5 , 12 , 3 , 10 , 1 , 8 , 15 , 6 , 13 , 4 , 11 , 2 , 9 ] z[48..63] = [0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9] z[48..63]=[0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9]

改变替换规则

将第一轮、第二轮、第三轮中的 t 循环右移替换 A,改为循环右移加原值进行替换。

新增第四轮用 k k k 函数进行计算。

下一篇我们将通过代码的形式介绍 JDK 中是如何实现 MD5 的。

系列文章:

数据安全之散列函数(一)-了解散列函数

数据安全之散列函数(二)- 数据分组与数据填充

数据安全之散列函数(三)- MD4 算法原理详解

数据安全之散列函数(四)- MD5 算法原理详解

数据安全之散列函数(五)- MD5 JDK 源码解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猩Talk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值