C#的MD5算法

2008年10月24日

在C#中使用MD5可以通过“HashPasswordForStoringInConfigFile”、“MD5CryptoServiceProvider”、“Cryptography.MD5”等各种方式实现。

最简单的方式是用“HashPasswordForStoringInConfigFile”,例如:

?View Code CSHARP
pass = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pass, "md5").ToLower();

该方法用于处理英文的字符串没有什么问题,但如果在使用UTF8编码的aspx中处理“GB2312”编码的字符串可能就得不到正确结果,这是由于它是以String为参数而不是byte[]。

第二种方法是用“MD5CryptoServiceProvider”,例如:

?View Code CSHARP
    static string MyMd5_1(string str)
    {
        //byte[] b = System.Text.Encoding.Default.GetBytes(str);
        byte[] b = System.Text.Encoding.GetEncoding("gb2312").GetBytes(str);
        byte[] d = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
        string r = "";
        for (int i = 0; i < d.Length; i++)
            r += d[i].ToString("x").PadLeft(2, '0');
        return r;
    }

第三种方法是用“Cryptography.MD5”,例如:

?View Code CSHARP
    static string MyMd5_2(string str)
    {
        //byte[] b = System.Text.Encoding.Default.GetBytes(str);
        byte[] b = System.Text.Encoding.GetEncoding("gb2312").GetBytes(str);
        System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
        byte[] d = md5.ComputeHash(b);
        string r = "";
        for (int i = 0; i < d.Length; i++)
            r += d[i].ToString("x").PadLeft(2, '0');
        return r;
    }

后两种方法实际上是以byte[]为参数的,因此可以很方便的改成处理各种语言编码的字符串。





标签: ,
归类: ASP.NET

Leave a Reply

*

您也可以使用微博账号登陆