我爱Aspx >> Asp.Net >> 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
.net中,由于.net framework 封装了常见的加密算法,因此实现标准的MD5算法只需要短短几行代码即可实现:
public string Md5(string strPassword)
{
MD5CryptoServiceProvider hashmd5;
hashmd5 = new MD5CryptoServiceProvider();
return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(strPassword))).Replace("-","").ToLower();
}
,但是当加密字符串含有中文或者其它双字节字符时,这种算法的结果与目前网上流行的ASP写的MD5算法的结果却不一致,这主要是由于目前网上流行的ASP写的MD5加密算法,存在一个缺陷,它使用了mid函数,取出的是“字符”,而正确的做法应该是取出字节,因此当加密字符串有双字节字符时,结果会与标准的MD5算法不一致.。但是由于在ASP向ASP.net的系统进行升级的过程中,已经向数据库内写入了大量以前ASP算法加密的密码,为了使新系统能够与原来的系统完全兼容,因此只有在.net 环境下实现与原来ASP算法完全一致的MD5算法。我的实现思路如下:
1、先用正则表达式对要加密的字符串进行判断,是否含有双字节字符。
2、如果含有双字节字符,调用实现与ASP算法一致的非托管COM组件进行处理。(这个组件只需要将原ASP加密算法代码进行适当修改,然后加入VB6中进行编译即可得到)。
3、否则直接调用.net的标准MD5加密算法。
可能有的朋友会问到,为什么不都直接调用COM组件来加密呢?这主要是从性能角度考虑的,由于调用非托管COM组件,.net需要生成一个代理类与之交互,所以在性能方面要远远低于.net内置的函数。
Ҷƪл˵?
.Net 下的Wondows窗体常用项目[05-20]
.NET 窗体之间的交互[05-20]
ASP.net 验证码(C#)[05-20]
Snake.Net中的ORM(二)[05-20]
Autodesk官方最新的.NET教程(二..[05-20]
Autodesk官方最新的.NET教程(一..[05-20]
浏览.NET Framework 2.0 类型库中..[05-20]
.NET断想[05-20]
通过.NET Framework访问活动目录..[05-20]
从Windows DNA到.NET(3)[05-20]
.Net 下的Wondows窗体常用项目[05-20]
使用UltraWinGrid时双击的处理[05-20]
.NET 窗体之间的交互[05-20]
ASP.net 验证码(C#)[05-20]
Snake.Net中的ORM(二)[05-20]
Autodesk官方最新的.NET教程(二..[05-20]
Autodesk官方最新的.NET教程(一..[05-20]
浏览.NET Framework 2.0 类型库中..[05-20]
C#冒泡算法![05-20]
利用Visual C#实现Window管道技术[05-20]