我在檢查C#和PHP文件的MD5校驗和時遇到了一個小問題。由PHP腳本計算的散列值不同於C#計算的散列值。C#和PHP中不同的MD5文件哈希
libcurl.dll C# = c3506360ce8f42f10dc844e3ff6ed999
libcurl.dll PHP = f02b47e41e9fa77909031bdef07532af
在PHP我用md5_file
功能,我的C#代碼:
protected string GetFileMD5(string fileName)
{
FileStream file = new FileStream(fileName, FileMode.Open);
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
任何想法如何計算相同的哈希?我認爲這可能與編碼有關。
在此先感謝!
我敢打賭,當您的PHP腳本使用'UTF-8'或'ISO-8859-1'編碼時,C#使用'Windows-1250'編碼...嘗試使編碼在兩側都相同... – shadyyx
它與命令行工具「md5sum」相比如何? –
與FileStream,你不能sute,指針是在begening。使用file.Seek(0,SeekOrigin.Begin)來確保是正確的。所有的例子在msdn中使用它在FileStream的構造函數之後。 – Xaruth