5.Hash函数(MD5)

本文介绍了MD5哈希函数,包括其算法流程、消息填充、分组处理、主程序实现、验证方法和算法特性。MD5具有压缩性、易计算性和抗碰撞性,但因王小云教授的碰撞研究,其安全性受到挑战,现在适用于不高度保密场景。
摘要由CSDN通过智能技术生成

要求:选择MD5或者其它的Hash函数进行编程实现。
a)简介
Hash函数(杂凑函数/散列函数)是将任意长的消息M变换为较短的、固定长度的值H(M)的不可逆的单向密码体制。Hash函数是密码学的基本工具,在数字签名和消息的完整性检测等方面有着重要的应用。
b)算法流程
MD5算法的流程可以分为:附加填充位、初始化链接变量、分组处理和步函数。
附加填充位:首先需要对明文信息进行填充,使其位长度模512和448同余。因此,信息的位长度被扩展至512×N + 448。然后在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度为512 × N + 448 + 64 = (N + 1) × 512,即长度恰好是512的整数倍。
初始化链接变量:使用4个32位的寄存器A,B,C,D存放4个固定的32位整型参数,
A:0x1234567,B:0x89ABCDEF,C:0xFEDCBA98,D:0x76543210。
分组处理:将填充好的信息进行分组,每组512位 ,共有N组。主循环有四轮,每轮循环包括16个步骤。每步的输入是4个32比特的链接变量和一个32比特的消息子分组,输出为32位值。经过4轮共64步之后,得到的4个寄存器值分别与输入链接变量进行模加,即得到此次分组处理的输出链接变量。
步函数: MD5每轮包含16步,每轮的步函数相同,即使用同一个非线性函数,而不同轮的步函数使用的非线性函数是不同的,即四轮使用4个不同的非线性函数。设X、Y、Z是3个32比特的输入变量,输出是一个32比特变量,则这4个非线性函数F、G、H和I定义为:F(X,Y,Z)=(X&Y)|((X)&Z);(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值