C#的MD5算法
2008年10月24日在C#中使用MD5可以通过“HashPasswordForStoringInConfigFile”、“MD5CryptoServiceProvider”、“Cryptography.MD5”等各种方式实现。
最简单的方式是用“HashPasswordForStoringInConfigFile”,例如:
pass = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(pass, "md5").ToLower(); |
该方法用于处理英文的字符串没有什么问题,但如果在使用UTF8编码的aspx中处理“GB2312”编码的字符串可能就得不到正确结果,这是由于它是以String为参数而不是byte[]。
第二种方法是用“MD5CryptoServiceProvider”,例如:
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”,例如:
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[]为参数的,因此可以很方便的改成处理各种语言编码的字符串。