• λ我爱Aspx >> Asp.Net >> 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)
  • 在.net中实现与ASP完全兼容的MD5算法(包括中文字符)

  • :aspxer  Դ:internet  :2007-5-20 16:32:37  ؼ:.net,asp
  • 在.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 FrameWork SDK文档的例子演示
    һƪ.Net 下的Wondows窗体常用项目