MD5算法 【原理】

MD5算法是一种单向散列算法(任意长度的消息运算) 128位

1.数据填充

        填充消息使其长度与448模512同余 (即长度=448 mod 512)

        与就是说,填充后的消息长度比512的倍数仅小64位。即使消息长度本省已经满足了上述长度要求也需要填充,填充方法是: 附在一个1在消息后面,然后用0来填充,直到消息的长度与448模512同余,至少填充1位,至多填充512位。

2.添加长度

        在上一步的结果之后附上64位的消息长度。如果填充前消息的长度大于2**64,则只使用其低64位。添加填充和消息长度之后,其中N是16的倍数。

        令M [0...N-1] 表示最终的消息,其中N是16的倍数。

3.初始化变量

        用4个变量 ( A, B, C, D ) 来计算消息摘要

        这些寄存器以下面的十六进制数来初始化

A = 01234567h   B = 89abcdefh   C = fedcba98h   D = 76543210h

 左移若干位,最后将所得结果加上a,b,c,d之一,并回送至A,B,C,D。由此完成一次循环。而且,在内存中是以低字节在前的形式存储的

        即如下的格式


01  23  45  67  89  AB  CD  EF  FE  DC  BA  98  76  54  32  10


数据处理

        以512位分组为单位处理消息。

        首先定义4个辅助函数,每个都以3个32位双字作为输入,输出1个32位双字

        

其中,"&" 是与操作。"|"是或操作。"~"是非操作。 "^"是异或操作。

        这4轮变换是对进入主循环的512位消息分组的16个32位字分别如下操作:将A,B,C,D的副本a,b,c,d中的3个经F,G,H,I运算后的结果与第四个相加,再加上32位和一个32位字的加法常数,并将所得之值循环左移若干位,最后将所得结果加上a,b,c,d之一,并回送至A,B,C,D,由此完成一次循环。

在Python中进行MD5加密就很赞了。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值