MD5加密算法原理及C#实现

MD5加密算法原理及C#实现

2014-08-16 09:20:23|?次阅读|上传:huigezrx【已有?条评论】发表评论

关键词:C#, 加密/解密|来源:唯设编程网

由于MD5加密理论上的不可逆性,所以在实际项目中我们通常将验证信息采用MD5加密,比如用户的密码和密码保护问题,还有操作系统的登录密码也使用了MD5加密。大多数编程语言都封装了MD5加密算法,提供现成的加密类,用户只需简单调用即可,本文介绍MD5的背景,实现原理和C#编程中的应用。

MD5简介

         MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法。换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

MD5算法原理

第一步:增加填充

        增加padding使得数据长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512个填充bit,也就是说填充的个数为1-512。第一个bit为1,其余全部为0。

第二步:补足长度

        将数据长度转换为64bit的数值,如果长度超过64bit所能表示的数据长度的范围,值保留最后64bit,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。也就是32bit的16倍的整数倍。在RFC1321中,32bit称为一个word。

第三步:初始化变量

用到4个变量,分别为A、B、C、D,均为32bit长。初始化为:

A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10

第四步:数据处理:

首先定义4个辅助函数:

F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))

其中:XY表示按位与,X v Y表示按位或,not(X)表示按位取反。xor表示按位异或。

函数中的X、Y、Z均为32bit。定义一个需要用到的数组:T(i),i取值1-64,T(i)等于abs(sin(i))的4294967296倍的整数部分,i为弧度。
假设前三步处理后的数据长度为32*16*Nbit

第五步:输出:

最后得到的ABCD为输出结果,共128bit。A为低位,D为高位。

C#中实现MD5加密

 ASP.NET开发中通常我们需要MD5加密将用户的敏感信息加密,不过C#已经提供了现成的类库封装了MD5加密算法,我们只需要简单调用即可:

           //欲进行md5加密的字符串
            string test = "123abc";
         
            //获取加密服务
            System.Security.Cryptography.MD5CryptoServiceProvider md5CSP = new System.Security.Cryptography.MD5CryptoServiceProvider();
     
            //获取要加密的字符串,并转化为Byte[]数组
            byte[] testEncrypt = System.Text.Encoding.Unicode.GetBytes(test);
            //加密Byte[]数组
            byte[] resultEncrypt = md5CSP.ComputeHash(testEncrypt);

            //将加密后的数组转化为字符串(普通加密)
            string testResult = System.Text.Encoding.Unicode.GetString(resultEncrypt);

            //作为密码方式加密
            string Encrypt PWD = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(test, "MD5");

可见我们使用C#实现MD5加密是非常方便的,而且其中使用的类库都由系统提供。

参考:http://blog.csdn.net/chessplayer/archive/2007/08/02/1722826.aspx

发表评论0条 】
网友评论(共?条评论)..
MD5加密算法原理及C#实现