我在检查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