改进MD5加密算法在系统密码存储中的研究及应用

2021-10-25 03:43陈登峰
信息记录材料 2021年10期
关键词:明文加密算法流程图

李 强,陈登峰

(1西安建筑科技大学信息与控制工程学院 陕西 西安 710055)

(2西安建筑科技大学建筑设备科学与工程学院 陕西 西安 710055)

1 引言

随着信息技术的不断发展,大数据时代已经到来,大数据的应用在给我们生活带来许多便利的同时,也带来了信息泄露、信息安全等问题。目前仍有部分网站用户名密码通过明文密码存储,这样增加了网站的风险性,密码极易被破解,导致用户信息泄露。因此,研究了单向散列函数(Hash函数)[1-2],巴格达理工大学的研究人员通过新改进方法解决了安全文档的验证,有效进行了MD5 Hash函数的扩展[3]。罗江华[4]提出了一种基于MD5和Base64的混合加密算法,解决了查询MD5散列值字典获取用户明文密码问题,提高了用户的密码安全。因此,本文研究了MD5加密算法,通过对系统登录密码进行加密后来提高网站安全性,但由于一些常用密码通过MD5值可以搜索到明文密码,存在一定的弊端,因此,本文在MD5算法的基础上通过增加密钥空间的方法来进行改进,提高密码储存安全性。

2 MD5算法研究

2.1 加密方法

目前,主要加密方式有单向和双向加密两种。它们的区别是是否需要解密,是否双向需要解密,单向不需要解密,例如MD5加密。一般比较常用的加密方式主要有DES加密[5]、RSA加密[6]、MD5加密,其中MD5加密算法应用较为广泛。

2.2 MD5加密算法

MD5(Message—Digest algorithm 5)信息—摘要算法是128位且通过随机长度的信息生成。

MD5算法具有以下特点:(1)压缩性:即任意长度的数据经过MD5算法进行计算,结果长度一样;(2)容易计算:给定一个原始数据,都可以计算出MD5值;(3)抗修改性:修改原始数据,MD5值也发生改变;(4)强抗碰撞:对于固定的原始数据和其MD5值,很难找到一个相同MD5数据。

3 MD5算法原理和实现改进

3.1 MD5算法基本原理

MD5算法主流程图见图1。

图1 MD5主流程图

首先对变量进行初始化,为后面应用做好准备,其次输入需要处理的信息,对信息进行填充,之后进行分组处理数据,最终输出MD5值。其中填充信息具体做法见流程图2。

图2 填充信息

其中,填充信息满足关系式L=m*512-64,其中L为消息长度,m为倍数。

流程图1中分组处理数据具体做法见图3。

图3 分组处理信息

对填充好的数据进行分组,分成512位的块,对4个链接变量A、B、C、D进行初始化,其中A=0X01234567;B=0X89abcdef;C=0Xfedcba98;D=0X76543210。初始化完成后,对消息中的多个512位块循环运行。

将4个链接变量a、b、c、d 组合成128位寄存器(abcd)用于保存中间结果和最终结果。

将当前512位块分解为16个子块,每个子块为32位;主循环有4轮循环,每一轮处理一个块中的16个子块。16个子块分别为M[0],M[1],…,M[15],或表示为M[i],其中i为1~15。

4轮迭代操作具体详细步骤如下:

4次线性操作中用到的线性函数具体为F、G、H、I,其中:

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));

其中,&代表与操作,|代表或操作,~代表非操作,^代表异或操作。

4种操作为:

FF(a,b,c,d,Mi,s,ti)表示 a=b+((a+(F(b,c,d)+Mi+ti)<<

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

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

II(a,b,c,d,Mi,s,ti)表示 a=b+((a+(I(b,c,d)+Mi+ti)<<

每一轮输出的中间和最终结果复制到寄存器abcd中,每一轮有16个寄存器。进行4轮操作,每轮16次操作。

上述操作完成后,将A、B、C、D分别加上a、b、c、d,用于下一分组数据继续运行算法,直至输出128位的A、B、C、D的级联,其中低字节始于A,高字节终于D的结果,算法结束。

3.2 改进MD5算法实现

根据3.1节MD5算法基本原理通过Java语言来进行实现,实验结果见表1。

表1 MD5实验结果

在实际应用中,经过MD5存储的密码,通过前台处理后,直接存入后台数据库中。然而经常会有忘记密码的情况,有一部分人的处理方法是,如果是常用的简单密码通过在数据库中找到其存储的MD5值,通过网络搜索就可以找到其对应的明文密码,这样便可以解决忘记密码的问题。然而这种解决办法也暴露了MD5算法的缺陷,因此在研究过程中就应该考虑这个问题,并加以解决。本文对MD5算法进行了改进,具体做法如下:

Step1:输入密码,通过前台MD5算法进行转换,将转换结果存入到后台Oracle数据库中进行管理,其结果为32位16进制数。

Step2:将存入的32位16进制数的5至19位进行提取,为下一步做好准备。

Step3:随机生成字符串,该字符串位数为15位,用于下一步替换。

Step4:将提取出的5至19位进行替换,完成后存入后台数据库表中。

通过Java代码根据以上步骤对改进MD5算法进行实现,实现结果见表2。

表2 改进后结果

为了保证实验结果的有效性,该测试数据包含数字、字母、下划线,分析表1和表2实验结果可以得出MD5加密算法的密钥空间为2的128次方,改进后的MD5秘钥空间为2的158次方,破解难度明显增大。在系统密码登录过程中,因为密码存储结果经过两次变换,遇到常用的简单密码通过在数据库中找到其存储的MD5值问题得以解决。

4 结语

本文研究了MD5加密算法的基本原理并通过Java语言进行实现,在实际应用过程中针对部分常用明文密码对应的MD5值可以搜索到的问题,本文对其进行了改进,通过增加密钥空间来提高密码安全性,并应用在系统密码存储中,实验结果表明,该方法有效。

猜你喜欢
明文加密算法流程图
奇怪的处罚
专利申请审批流程图
专利申请审批流程图
HES:一种更小公钥的同态加密算法
奇怪的处罚
基于小波变换和混沌映射的图像加密算法
四部委明文反对垃圾焚烧低价竞争
宁海县村级权力清单36条
对称加密算法RC5的架构设计与电路实现
基于Arnold变换和Lorenz混沌系统的彩色图像加密算法