2013-04-08 39 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

嘗試添加日誌記錄。因此,首先將該文件下載到字符串(將其寫入磁盤的某處,以便稍後進行比較)。然後在磁盤上計算哈希。 我在我的一個項目中遇到過這樣的問題,在這種情況下,問題是代理服務器增加了一些響應。但沒有文件在磁盤上,你無法比較它們。