2013-04-08 45 views
7

我已经写了一个函数,它将文件的URL作为参数并返回该文件的MD5哈希值。函数每次返回不同的MD5哈希值

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

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

我做了一些Google搜索,发现问题可能是因为开发者。服务器是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; 
} 

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

+3

也许它与不同的语言环境有关?你是否尝试用固定值替换'aResponse.GetResponseStream()'并查看问题是否仍然存在? – 2013-04-08 11:38:18

+1

该URL上的页面是否在调用之间改变? – Oded 2013-04-08 11:40:47

+0

@ErikSchierboom:不,我没有。我现在试试。谢谢 – 2013-04-08 11:41:45

回答

1

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