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==》D12spa
0D12 ==X2==》0D12code