2013-04-08 5 views
7

Ich habe eine Funktion geschrieben, die die URL einer Datei als Parameter akzeptiert und den MD5-Hash dieser Datei zurückgibt.Funktion gibt jedes Mal einen anderen MD5-Hash zurück

Der Hash, der von dieser Funktion (in der Entwicklungsumgebung) generiert wird, stimmt mit dem Hash überein, der von einem Tool eines Drittanbieters für die gleiche Datei generiert wird.

Wenn diese Funktion jedoch in der QA-Umgebung meines Clients implementiert wurde, gibt diese Funktion bei jedem Aufruf der Funktion verschiedene Werte zurück.

Ich habe einige Google-ing und fand, dass das Problem möglicherweise, weil der Entwickler. Server ist 64bit und der QA-Server war 32bit. Da ich keinen Zugriff auf die Server meines Clients habe, habe ich es auf einem anderen 32-Bit-Server installiert und festgestellt, dass die Hashes sogar in einem 32-Bit-Server übereinstimmen (die Funktion funktioniert wie erwartet?).

Ich schaute auch this question.

hier ist die Funktion, die ich schrieb:

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; 
} 

Meine Fragen sind; Was könnte der Grund dafür sein, dass diese Funktion verschiedene Werte zurückgibt? Ist das Problem in meiner Funktion?

+3

Vielleicht hat es etwas mit verschiedenen Schauplätzen zu tun? Haben Sie versucht, 'aResponse.GetResponseStream()' durch einen festen Wert zu ersetzen und zu sehen, ob das Problem dann immer noch auftritt? –

+1

Ändert sich die Seite auf dieser URL zwischen Anrufen? – Oded

+0

@ErikSchierboom: Nein, habe ich nicht. Ich werde es jetzt versuchen. Danke –

Antwort

1

Versuchen Sie, Protokollierung hinzuzufügen. Laden Sie die Datei zuerst in den String (schreiben Sie sie irgendwo auf die Festplatte, um sie später zu vergleichen). Dann berechnen Sie den Hash auf der Festplatte. Ich hatte so ein Problem in einem meiner Projekt, und in diesem Fall Probleme mit Proxy-Server, die etwas zur Antwort hinzugefügt. Aber ohne Datei auf der Festplatte können Sie sie nicht vergleichen.