【2022寒假day2】加密算法1 MD5

单向散列算法

单向散列算法即Hash算法,是一种将任意长度的消息压缩到某一固定长度的函数,该过程不可逆。本节主要介绍MD5算法。

MD5算法

该算法对输入的任意长度消息运算,产生一个128位的消息摘要。

  • 算法原理

数据填充
首先判断数据长度,输入一个消息序列(小端序,序列),消息内容为字节,8个bit,每个字节在内存中用双字符表示(2*4),判断它的长度(位数)是否与448模512同余(如果换成字节就是与56模64同余,一个字节为8位,一个字符为4位),如果是,则在消息后一位附加一个1(注意1填充进去的时候是小端序的,即1000 0000,换成16进制为0x80),然后用0填充直到消息的长度与448模512同余(因为已经满足同余条件了所以要填充512位);如果没有满足同余条件,则在消息后附加1,然后用0填充知道消息长度满足同余条件。

添加长度
在上一步数据填充的结果后面附加上64位的消息长度,这样消息长度就变成了(n+1)*512,然后根据原始输入的消息序列长度位数(十进制),转换成16进制数,小端序填入这64位消息长度中。

初始化变量
定义四个32位的寄存器A,B,C,D,填入数据后面,标准的幻数(物理顺序)是A=(01234567),B=(89ABCDEF),C=(FEDCBA98),D=(76543210)。在程序中定义为小端序表示A=0X67452301,B=0XEFCDAB89,C=0X98BADCFE,D=0X10325476。

数据处理
首先定义4个辅助函数,涉及与或非亦或操作
在这里插入图片描述
以每512位为一组处理信息,进入主循环的512位消息分组分为16个32位的段,进行以下循环:
在这里插入图片描述
其中,以[ABCD K S I]为例说明各个参数代表意义,ABCD为每一段的初始参数,第一段的初始参数为标准幻数,K,I为固定值,X[K]为该521消息分组的第K段的消息内容,S为向左移位值,貌似也是固定的,可查md5移位表,T[I]等于4294967296*abs(sin(i))向下取整,其中i用弧度表示,数组T是为了消除变换中的线性。每一次循环所得各个参数最终结果与原始值对应相加,最后一次循环所得即为md5值。可通过https://blog.youkuaiyun.com/goodnameused/article/details/81068697中的思维导图辅助理解。
在这里插入图片描述
前几天考科三断更,就当今天是寒假第二天。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值