随着互联网的快速兴起和广泛应用,基于浏览器(Browser)和服务器(Server)之间的信息传输越来越频繁,以Web方式对数据进行操作的安全问题日益突出。为此,我们提出了一种基于改进的MD5加密算法加密的传输方式,实现B/S通信的传输安全。
一、MD5加密算法原理
MD5的全称是MessageDigest5,是Hash算法中的一种重要加密算法,具有单向加密、加密结果唯一、安全性能好等特点。MD5加密算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,加密算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
MD5加密算法的流程如图1所示。
(1)信息填充
首先需要对明文信息进行填充,使其位长度对512求余的结果等于448。因此,信息的位长度(BitsLength)将被扩展至N*512+448。然后,再在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度为N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。
(2)结构初始化
在处理过程中需要定义一个结构。该结构包含了每一次需要处理的一个明文块(512bit)和计算出来的散列值(128bit)。在散列的整个过程中,它的作用非常重要,各个明文块计算出来的散列值都是通过它来传递的。
(3)分组文件
将填充好的文件进行分组,每组512位,共有N组。
(4)处理分组
使用MD5加密算法处理每组数据。
MD5加密算法在计算时会用到四个32位被称作链接变量(ChainingVariable)的整数参数,在使用之前要对它们赋初值,分别就为:
A=0x01234567,B=0x89abcde,fC=0xfedcba98,D=0x76543210。
当设置好这四个链接变量后,就开始进入算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。
将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。
主循环有四轮,每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一,最后用该结果取代a、b、c或d中之一。
(5)输出结果
当全部信息处理完成后,将分组处理的结果进行处理,输出计算结果
所有这些完成之后,将A、B、C、D分别加上a、b、c、d。然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。当全部分组处理完成后,将结果级联,即得到了MD5处理的结果。
二、基于MD5加密算法的B/S通信系统的实现
在微软公司的Microsoft.NET开发系统中,Microsoft.NETSDK提供了System.Security.Cryptogra
phy命名空间,其中包含MD5CyptoServiceProvider类,在该类中提供专门用于MD5单向数据文件加密的解决方法,我们即是使用此方法类来实现MD5加密。通过使用类中的方法ComputeHash,可直接应用MD5加密算法,经过编程可以自定义加密函数来实现MD5的加密算法。
在B/S通信系统中,可以对信息文件进行如下加密方式如图2所示。
基于MD5加密算法的B/S通信方案的具体实现:
(1)首先,用户在注册时,将用户名利用MD5算法加密,得到加密后的用户名。然后再把用户名和密码串接,将串接后的值进行MD5加密,得到加密后的口令文件。将加密后的用户名和口令文件存储在服务器端的数据库中。
(2)客户通过浏览器进行数据请求时,首先在浏览器端通过程序先将用户名利用MD5算法加密,得到加密后的用户名。然后再把用户名和密码串接,将串接后的值进行MD5加密,得到加密后的口令文件。将加密后得到的用户名和口令文件及服务器端生成的随机验证码数据发送到服务器端。
(3)用户提交表单,服务器端进行验证,具体的流程如图3所示。
如果客户端传来的数据包中和服务器(Server)端存储的经加密后的口令相同,并且随机数的值也对应相等,则服务器后向客户端指定,可以让客户端重新定向到下一步的数据传输。如果对应不能完成认证,刚提示用户重新输入相关信息。这样,就完成了对用户的身份认证过程。
实际应用中,我们可以通过调用函数,在客户端对用户名和用户密码进行加密,将得到的加密值传送到服务器端,和服务器上存储的加密后的值进行对比,得到服务器端返回结果,从而实现对信息传输过程中的保密。
三、基于MD5加密算法的B/S通信系统的系统安全性分析
MD5加密算法是一种Hash算法,Hash算法的特点就是单方向性,比如可以把一个文件转成一串字符,但反向却不可能。
当前,针对MD5加密方法的破解存在一种穷举方式,其实是把常用的密码经MD5处理后的数据存储起来然后再与要破译的MD5密码结果相匹配就有可能得到明文。这种方法的确对于一些简单的密码存在破解的可能,但这种危险是可以通过合适的技术手段给予降低。
针对这种破解方法有两种常用安全对策,一种是加强密码的本身的设置,密码的长度要至少8个字符以上,同时不要用单纯的字母和数字,最好是字母与数字加符号的随机组合,并定时更换,减少被字典表数据匹配的机会。第二种方法是,对生成的MD5密码进行再加密,这样生成密码就不可能在字典表中找到。
采取的方法是先将用户名和密码串接后,再将用户名也加密。进一步提高了密码的安全性。基于MD5加密算法的B/S通信系统通过相关的对比,达到了安全保密的目的。
MD5加密算法是一种非常易用和安全的加密措施,适当应用可以加强网站和程序的安全性。系统利用MD5加密算法将用户信息文件加密后保存,具有以下特点:
(1)效率高、实用方便。程序代码简洁,运算量对计算机要求不是太高,运算速度快,方便数据的快速交换。
(2)安全性高。针对穷举密码方式的暴力破解,系统所采用的本文所提到一些加密的改善技巧比单纯的MD5加密算法加密又进一步加强了密码的安全。
小知识之B/S结构
B/S结构(Browser/Server结构)即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现。