【问题标题】:Function returns different MD5 hash each time函数每次返回不同的 MD5 哈希
【发布时间】:2013-04-08 11:35:41
【问题描述】:

我写了一个函数,它以文件的 URL 作为参数,并返回该文件的 MD5 哈希。

此函数生成的哈希(在开发环境中)与第三方工具为同一文件生成的哈希匹配。

但是当它部署在我客户的 QA 环境中时,每次调用该函数都会返回不同的值。

我做了一些谷歌搜索,发现问题可能是因为 dev.服务器是 64 位的,而 QA 服务器是 32 位的。由于我无法访问客户端的服务器,因此我将其部署在另一台 32 位服务器中,发现即使在 32 位服务器中哈希值也匹配(功能按预期工作?)。

我也看过this question

这是我写的函数:

public static String GetMD5HashFromFile(String url)
{
    String response = String.Empty;
    HttpWebRequest aRequest = (HttpWebRequest)WebRequest.Create(url);
    using (HttpWebResponse aResponse = (HttpWebResponse)aRequest.GetResponse())
    {
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] retVal = md5.ComputeHash(aResponse.GetResponseStream());
        response = "MD5:" + BitConverter.ToString(retVal).Replace("-", string.Empty);
    }
    return response;
}

我的问题是;这个函数返回各种值的原因是什么?我的功能有问题吗?

【问题讨论】:

  • 也许与不同的语言环境有关?您是否尝试过将aResponse.GetResponseStream() 替换为固定值并查看问题是否仍然存在?
  • 该 URL 上的页面在调用之间是否会发生变化?
  • @ErikSchierboom:不,我没有。我现在试试。谢谢
  • @Oded: 不,网址不会改变
  • @AwadMaharoof 服务器很可能使用chunked transfer encoding 进行响应,GetResponseStream 不会自动处理,即使传输相同的数据,每个请求的结果也可能不同。跨度>

标签: c# md5


【解决方案1】:

尝试添加日志记录。因此,首先将文件下载到字符串(将其写入磁盘的某个位置,以便稍后进行比较)。然后计算磁盘上的哈希。 我在我的一个项目中遇到了这样的问题,在这种情况下,问题是代理服务器添加了一些响应。但是如果没有磁盘上的文件,您就无法比较它们。

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 2018-03-23
    • 2017-11-23
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2011-05-17
    相关资源
    最近更新 更多