【发布时间】:2013-03-29 14:51:42
【问题描述】:
我在检查 C# 和 PHP 中文件的 MD5 校验和时遇到了一个小问题。 PHP脚本计算的hash与C#计算的hash不同。
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();
}
任何想法如何计算相同的哈希?我认为这可能与编码有关。
提前致谢!
【问题讨论】:
-
我敢打赌 C# 使用
Windows-1250编码,而您的 PHP 脚本使用UTF-8或ISO-8859-1编码...尝试使两边的编码相同... -
与命令行工具
md5sum相比如何? -
使用 FileStream,您不能确定指针在开始处。使用 file.Seek(0, SeekOrigin.Begin) 确保这是正确的。 msdn 中的所有示例都在 FileStream 构造函数之后使用它。
-
@Jack
md5sum返回d41d8cd98f00b204e9800998ecf8427e但有点奇怪,因为它和 md5("") 一样 -
@shadyyx PHP 不使用任何编码,PHP 中的字符串与
byte[]相同,因此无需 PHP 解码。
标签: c# php encoding md5 checksum