md5 加密长度_MD5算法解析

MD5简介

MD5即Message-Digest Algorithm 5, 信息学中使用广泛的哈希算法

这个算法具有很多性质:

  1. 压缩性: 对于任意长度的输入, 输出长度总是相同的
  2. 容易计算: 线性时间复杂度
  3. 抗修改性: 对原数据的一点点修改都会导致最终结果的巨大变化
  4. 抗碰撞性: 已知原数据和MD5值很难生成与原数据不同但MD5值相同的数据

MD5可以生成任意一个文件的“数字指纹”,对文件的微小改动都会直接导致数字指纹的巨大变化。

注:MD5加密中文需要使用UTF-8编码,但Windows下默认是GBK编码,两种编码得到的结果是不一样的

加密步骤

填充

MD5中,首先要对信息进行填充,先填充一个1,后面都填充0,使得信息的长度 ,即 。为什么要求模出来是448呢?因为448=512-64,而填充完后后面还要再填上64位的原数据长度,如果超出64位则填充原数据长度的后64位,这样可以使得最终的数据长度为512的整数倍,才可以满足后面继续加密的需要。

初始化变量

初始化4个128位链接变量如下:

A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476

处理数据

分组

将原始数据每512bits为一个分组 (这就是前面要求填充到512整数倍的原因),对每组分别进行处理

处理每个分组的数据

每个分组有四个变量

,第一分组的
分别为上面所写了的4个16进制数,此后每一个分组的这四个变量都是上一个分组计算的结果。

现在定义四个非线性函数 (逻辑运算) :

其中​表示

按位与,​表示
按位或,​表示
按位非,​表示
按位异或

接下来,我们设​

为这一组信息的第​
个子分组 (​
) ,​
​的整数部分,​
是整数,单位是弧度(​
)

现在定义四个操作:

注意:<<在这里是左环移而不是一般的左移!!!

左环移和左移的区别:
现有一个二进制数11010010,左环移三位后是10010110,而左移三位后是10010000

接下来就可以操作了,共4轮循环,每轮16次,伪代码如下࿱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值