C# PHP 對漢字進行MD5計算,得到的結果不一樣
阿新 • • 發佈:2018-12-31
C# 計算32位小寫md5hash值演算法如下:
public static string GetStrMd5_32X(string ConvertString) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString))); t2 = t2.Replace("-", ""); return t2.ToLower(); }
當處理數字字母英文字元時,與php中函式md5計算一致,當處理漢字時,計算結果不同
例如計算“你好”
C#
b94ae3c6d892b29cf48d9bea819b27b9
php
7eca689f0d3389d9dea66ae112e5cfd7
經排查原因,發現md5本質是計算二進位制流,演算法是一致,造成不同的原因是因為C#預設採用UNICODE編碼轉換,php採用UTF-8編碼,需要將C#中UTF8Encoding.Default.GetBytes(ConvertString)
修改為
UTF8Encoding.UTF8.GetBytes(ConvertString)