標准的MD5加密32位小寫的:
public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvider(); //byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString); byte[] fromData = System.Text.Encoding.UTF8.GetBytes(myString);// byte[] targetData = md5.ComputeHash(fromData); string byte2String = null; for (int i = 0; i < targetData.Length; i++) { byte2String += targetData[i].ToString("x"); } return byte2String; }
如果用上面這個標准的會有一個問題,就是丟失位數,所以字節轉換成字符串的時候要保證是2位寬度啊,某個字節為0轉換成字符串的時候必須是00的,否則就會丟失位數啊。不僅是0,1~9也一樣。
用以下代碼就可以避免:
public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvider(); //byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString); byte[] fromData = System.Text.Encoding.UTF8.GetBytes(myString);// byte[] targetData = md5.ComputeHash(fromData); string byte2String = null; for (int i = 0; i < targetData.Length; i++) { //這個是很常見的錯誤,你字節轉換成字符串的時候要保證是2位寬度啊,某個字節為0轉換成字符串的時候必須是00的,否則就會丟失位數啊。不僅是0,1~9也一樣。 //byte2String += targetData[i].ToString("x");//這個會丟失 byte2String = byte2String+ targetData[i].ToString("x2"); } return byte2String; }