string UserMd5(string str) { string cl = str; string pwd = ""; MD5 md5 = MD5.Create();//實例化一個md5對像 // 加密后是一個字節類型的數組,這里要注意編碼UTF8/Unicode等的選擇 byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); // 通過使用循環,將字節類型的數組轉換為字符串,此字符串是常規字符格式化所得 for (int i = 0; i < s.Length; i++) { // 將得到的字符串使用十六進制類型格式。格式后的字符是小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符 pwd = pwd + s[i].ToString("X"); } return pwd; }
最開始我使用上面的進行加密,后來只要出現中文我就發現經常性的會少一位數或者少幾位數,經過檢查發現Encoding.Default使用的是默認的編碼:gb2312
所以改變加密方式:
string UserMd5(string str) { string cl = str; string pwd = ""; MD5 md5 = MD5.Create();//實例化一個md5對像 // 加密后是一個字節類型的數組,這里要注意編碼UTF8/Unicode等的選擇 byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl)); // 通過使用循環,將字節類型的數組轉換為字符串,此字符串是常規字符格式化所得 for (int i = 0; i < s.Length; i++) { // 將得到的字符串使用十六進制類型格式。格式后的字符是小寫的字母,如果使用大寫(X)則格式后的字符是大寫字符 pwd = pwd + s[i].ToString("X2"); } return pwd; }
X代表取消最開始的0 X2代表不省略開始的0
eg: 0D12 ==X==》D12
0D12 ==X2==》0D12