MD5加密算法的改进及应用
2017-08-10赵素萍
赵素萍
(山西农业大学信息学院信息工程系,晋中 030800)
MD5加密算法的改进及应用
赵素萍
(山西农业大学信息学院信息工程系,晋中 030800)
为了防止用户信息泄漏,对比介绍MD5加密算法的基本原理,MD5加盐加密算法,原始密码打乱顺序后加盐加密并二次加密,并将该算法应用于项目开发的用户信息保密方面。经过解密工具的解密,发现该算法有绝对的优越性。
MD5;ASP.NET;加盐加密;二次加密
0 引言
2011 年曾爆发的密码泄漏事件,使得600余万用户的登录信息以明文的方式被挂到网上,导致互联网行业一片人心惶惶。由于大多数用户将邮箱、微博、游戏、网上支付、购物等账户都设置了相同的密码,那么一旦某一网站的服务器被黑客攻击后,会导致用户信息的泄露,更严重的是可能导致购物消费账户的信息泄漏而涉及到财产安全。
同时,有些网友可能会从浏览器上搜“密码库”并下载。但是黑客已将该密码库文件与病毒绑到了一起,用户一旦下载就可能将自己的电脑染上病毒,并有可能将此文件在网络上大量的传播开。
由此可以看出,网站数据库若明文保存密码后,带来的的后果是非常严重并不可预知的。
1 MD5加密算法
MD5(Message-Diggest Algorithm 5)算法[1],将输入的明文数据数组加密以后,输出密文数据数组[2]。从MD5的散列结果逆推出原文[3]是不可能的。所以MD5具有不可逆性和唯一性。
原始密码在该算法的加密之后也并不是绝对安全的。为了验证破解速度,笔者下载MD5计算器并打开在线MD5解密网页。验证的步骤如下:
第一步:在MD5计算器中计算出密码“123456a”加密后的MD5值的字符串为“9cbf8a4dcb8e30682b927 f352d6559a0”,此字符串即为数据库中保存的字符串。
第二步:将加密后的字符串放到解密网页进行解码,而此密码的解码速度还不到两秒钟的时间,查询结果如图1所示。
图1 MD5计算后解密
通过以上实验可以看出,所谓道高一尺魔高一丈,加密和解密是不断互相推进的过程,明文保存的破解引发了密码泄漏事件,而密码泄漏事件又引发了密码加密保存,随着加密保存的推出,网上又出现了相关的破解工具。解密算法有以下几种:(1)通过穷举法比对所有字母、数字以及特殊字符的组合情况,将字符串经过MD5加密后再与数据库中的MD5值进行比较;(2)将常见密码与其MD5加密值保存到数据库中,然后将MD5加密值进行一一比对,相同则将黑客数据库中的原始密码输出。
目前对于密码的保护问题,一般采取的措施是建议用户注册时增加原始密码的强度,即我们一般在注册时会有密码强度的提醒,如果密码设置的过于简单,还会时不时收到网站发来的邮件(建议用户修改密码以增加密码强度)。用户加强密码的强度原则为,在原密码的前面、中间或后面加上一些特殊的符号使密码加长,增强密码的安全性。从而增加黑客破解密码的难度。
由此可见,简单的MD5加密并不能保证用户信息的绝对安全。只是降低了黑客破解密码的效率而已。如何在不增加密码强度的基础上也能保证用户密码的绝对安全呢,这将是本文研究的重点。
2 MD5加密算法的改进
为了进一步保护用户的信息不被泄漏,故需要对MD5加密算法进行进一步的改进,以达到提升系统安全性的目的。
在对用户密码进行MD5加密算法之前,先对用户密码进行加盐设置,该算法的实现步骤如下:
(1)程序开发人员或网站管理员设置一个盐值,并将盐值存储到配置文件中;
(2)当用户需要注册信息时,后台获取用户输入的密码,将密码与盐值连接后,再经过MD5加密,加密后的字符串作为密码保存到数据库中;
(3)当用户登录时,后台从网页上取出用户输入的用户名和密码,并从配置文件中取出程序员设置好的盐值,将用户数据的密码和盐值连接后经过MD5加密,若加密后的字符串与数据库中的一致,则登录正确;若不一致则用户登录失败。
通过以上算法,即使黑客攻击了数据库,将加密后的字符串破解后,得到的数据也不是正确的密码。
然而该算法并不具有绝对的安全性,因为黑客将数据库攻击后,该数据库中所有用户的密码都使用了相同的盐值,将一批密码解码后很容易发现规律。进而达到破解密码的目的。所以简单的加盐加密也并不是绝对安全的。
通过对加盐加密存在潜在隐患的分析,可能很多读者会想到,将盐值设置为一个变化的值,那么黑客就发现不了规律了,笔者曾经也看到过一篇论文,他的算法是系统产生一个随机的字符串R,保存的字符串为将用户输入的字符串与随机字符串R连接后进行加密,然而带来的问题是,既然是随机的,用户注册和登录的随机字符串必然不会相同,导致软件无法实现登录功能。唯一的解决办法是用户注册时产生的随机字符串R必须保存到数据库中,将来用户登录时,后台要从前台取出用户输入的密码和数据库中存储的随机字符串R,连接后再进行加密。然而黑客既然已经攻破了数据库,那么这个随机字符串黑客还是可以看到的。这相当于直接告诉了黑客每个用户的盐值。
由此可见,不论是固定盐值的加盐加密算法,还是可变盐值的加盐加密算法,都是不安全的。不可否认,只要盐值设置得当,加盐加密算法还是具有较强的安全性的。为了加强对用户信息保护,尤其是对用户财产安全的保障,在加盐加密算法的基础上,还需要进一步对密码进行加密保护。
首先要设置相应复杂度的盐值,将用户输入的密码字符串的顺序进行打乱,而打乱的方法很多,程序员在设计算法时可自行决定,本文的设计原理为将用户密码的前两个字符截取后连接到剩下字符串的尾部,然后对打乱的字符串加盐加密后,再经过一次MD5的加密,该算法为:
MD5(MD5(pwd.SubString(2)+pwd.SubString(0,2)+ salt))
通过以上算法,即使黑客攻击了数据库,将加密后的字符串破解后,得到的数据也不是正确的密码。
3 改进MD5的应用
在ASP.NET中对字符串的MD5加密:NETSDK通过计算哈希值的方法来为用户输入的信息进行加密。该实验基于VS2010和SQL Server 2008平台,使用C#编程语言,并使用MD5加密算法对用户输入的字符串进行了加密。代码如下:
其中strin为用户输入的密码,salt为用户设置的盐值,即使黑客破解了该用户的密码,那么密码也不是正确的密码。
4 结语
通过增加用户原始密码的强度,对用户原始密码的字符串顺序进行打乱,对打乱的字符串进行加盐,对加盐后的字符串进行多次加密[4]。可以保证数据的安全性,具有一定的参考价值。需要注意的是,经过简单MD5算法加密后的密文有可能对应多个明文,即简单MD5加密算法具有碰撞性。而本文通过一系列的改进,不仅提高了原算法的安全性,同时也增强了密码的抗碰撞性。
[1]Rivest R.The MD5 Message-Digest Algorithm.RFC 1321,1992,4.
[2]Homer A,Sussman D.ASP.Net高级编程[M].李敏波译.北京:清华大学出版社,2005.
[3]施卫锋,周俊.多户住处系统中数据安全性控制及其实现[J].微机发展,2003(13):12-13.
[4]孙永清,顾雨捷.基于动态注册码的软件加密保护[J].计算机工程,2007,33(12):183-184
Improvement and Application of MD5 Encryption Algorithm
ZHAO Su-ping
(Department of Information Engineering,College of Information,Shanxi Agricultural University,Jinzhong 030800)
In order to protect user's information,introduces the basic principle of MD5 encryption algorithm,MD5 encryption algorithm with salt.Dis⁃turbs the order of the original password,then uses MD5 encryption algorithm with salt,and then secondary encryption,upsets the order and two salt encryption.Finally applies the algorithm to protect the customer's information of project development.After decryption tool,finds that the algorithm has the absolute superiority.
赵素萍(1986-),女,山西太原人,硕士,助教,研究方向为网络安全
2017-03-14
2017-05-20
1007-1423(2017)15-0060-03
10.3969/j.issn.1007-1423.2017.15.016
MD5;ASP.NET;Add Salt to Encryption;Secondary Encryption