今天在開發一個軟體時,同時在B/S版和C/S版中都要用到MD5加密,在
ASP.NET中使用的是
/**//// <summary>
/// 取得MD5加密串
/// </summary>
/// <param name="input">源明文字元串</param>
/// <returns>密文字元串</returns>
public static string GetMD5Hash(string input)
...{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strOriginal, "MD5");
}
的加密方式;
而在WinForm中用的是
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.Default.GetBytes(input);
bs = md5.ComputeHash(bs);
System.Text.StringBuilder s = new System.Text.StringBuilder();
foreach (byte b in bs)
...{
s.Append(b.ToString("x2").ToUpper());
}
string password = s.ToString();
return password;
但發現同樣一個字元串,兩種方式得出的密文是不一樣的,最後才發現原來是編碼方式導緻的,ASP.NET裡預設的是UTF-8編碼,把WinForm程式裡的System.Text.Encoding.Default.GetBytes(input);替換成System.Text.Encoding.UTF8.GetBytes(input);即可
最終正确版:
byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/3803394.html,如需轉載請自行聯系原作者