65、常见迭代哈希函数:MD5、SHA-1与SHA-2详解

常见迭代哈希函数:MD5、SHA-1与SHA-2详解

1. MD5函数概述

MD5是一种Merkle–Damgård哈希函数,其填充方式采用Merkle–Damgård强化的变体,将消息长度编码在最后一个块的最后64位。因此,MD5支持的消息长度最长为$2^{64}-1$位。它使用512位的块大小,生成128位的哈希值,内部状态大小同样为128位。

1.1 MD5压缩函数

MD5的压缩函数是专门设计的,并非由其他密码原语(如分组密码)构建。处理单个消息块时,输入状态(链接值)被拆分为四个32位的字A、B、C、D,消息块则被分成16个32位的字。在64次迭代(分为四轮)过程中,消息被混入状态。每一轮使用自己的常量集和非线性轮函数。最终结果由四个字A′、B′、C′、D′组成,然后将它们与原始状态A、B、C、D进行模$2^{32}$加法,得到函数的输出。

虽然压缩函数不是基于密码原语构建的,但可以将其解释为基于分组密码的Davies–Meyer型构造。这里,64次迭代形成一个置换,可将消息块解释为分组密码的密钥。与原始的Davies–Meyer公式不同,MD5使用模$2^{32}$加法。

1.2 MD5的ARX设计

MD4、MD5以及SHA-1和SHA-2采用所谓的ARX设计(加法、旋转和异或的缩写),主要基于加法、旋转和异或操作构建。模加法通过进位位的传播增加了额外的扩散,这是异或操作所不具备的特性。此外,模加法是非线性的,并且与旋转、位移或异或操作不满足结合律。

1.3 MD5压缩函数伪代码

MD5(m)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值