1. 程式人生 > >C# PHP 對漢字進行MD5計算,得到的結果不一樣

C# PHP 對漢字進行MD5計算,得到的結果不一樣

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)