MD5算法原理及代码实现

MD5算法原理及代码实现

MD5:Message-Digest Algorithm 是一种不可逆的字符串变换算法,严格来说并不能称之为加密算法。原因在于无法通过一定的密钥key进行还原,这也是为什么该算法不可逆,因为其本身是对任意长度的字符串转换为一个128bit的大整数。

MD5算法加密步骤

1、填充
MD5加密算法可以针对大文件甚至几GB的文件进行加密,打个比方,就像是一头整牛进入加工车间,出来的是一袋冷藏肉一样,这个过程必然也是不可逆的。
要加密的信息必然是不定长度的。而输出要是一个128bits的,由四个32位分组组成的,然后将四个32位分组级联成一个128位散列值。首先进行填充:
1.将信息填充成其位长对512取余的448的长度(马上解释)
在信息后面填充一个1和N个0,直到满足第一个条件
2.在结果后面附加一个以64位二进制表示的填充前信息长度,极端情况64位不够表示长度就取低64位的
经过1.2两步后我们得到一个信息位长  N*512+448+64=(N+1)*512的填充好的信息

注意:尽管我们说MD5算法是不可逆的,但是在现实情况会有两种情况

一、用户输入简单密码例如123456那么MD5加密后的结果为32位的字符串,多次输入123456结果相同,就有了彩虹表,可以对简单密码输出结果进行对比,从而破解密码。

二、两段不同输入可能对应同一种输出结果,称之为杂凑冲撞。有实际案例。

2.初始化变量
定义四个大端字节序组成的初始链接变量,由16进制组成,命名为A.B.C.D
令:
A=0x01234567,

B=0x89ABCDEF,

C=0xFEDCBA98,

D=0x76543210。  
此为物理顺序,程序中定义中,考虑到内存数据存储大小端的问题,将高字节存于内存低地址,低字节存于内存高地址。
定义四个线性函数:
F(X,Y,Z)=(X&Y)|((~X)&Z)

G(X,Y,Z)=(X&Z)|(Y&(~Z))

H(X,Y,Z)=X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

3.循环运算
一、输入数据每512字节分为16组,则一组64位(8个字节)
二、设Mj表示消息的第j个子分组(从0到15),
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<<s)

GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<<s)

HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<<s)

II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<<s)
三、主循环有四轮,第一轮进行16次操作,每次操作对abcd其中三个进行非线性函数运算,然后加上第四个变量,文本的一个子分组和一个常熟,再将所得的结果向左移一个不定的数
四、最后输出的就是一个a.b.c.d的级联。

MD5算法的优劣

1、相对于MD4进行三轮,MD5多一轮,相对安全性提高

2、每一步均有唯一的加法常数

3、为减弱第二轮中函数G的对称性从(X&Y)|(X&Z)|(Y&Z)变为(X&Z)|(Y&(~Z))
4、第一步加上了上一步的结果,这将引起更快的雪崩效应.
5、改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似.
6、近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应.各轮的位移量互不相同

但同样的,因为用户输入基本不会太长,所有也有了响应的彩虹表破解用户密码的事情偶有发生,这这时就用到了加盐策略。

另:trump的Twitter密码被一名荷兰黑客猜中为“MAGA2020!”

JAVA实现MD5

import java.security.MessageDigest;
// MassageDigest 信息摘要算法 提供MD5和SHA,且输出固定长度的HASH值,一般为32位
public class MyMD5 {
   

    static char[] hex = {
   '0','1','2','3','4','5','6','7','8','9','A'
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值