2013-04-08 15 views
7

Napisałem funkcję, która pobiera adres URL pliku jako parametr i zwraca skrót MD5 tego pliku.Funkcja zwraca różne wartości mieszania MD5 za każdym razem

Hash wygenerowany przez tę funkcję (w środowisku programistycznym) jest zgodny z hashem wygenerowanym przez narzędzie innej firmy dla tego samego pliku.

Ale kiedy zostało to wdrożone w środowisku QA mojego klienta, ta funkcja zwraca różne wartości za każdym razem, gdy funkcja jest wywoływana.

Zrobiłem trochę Googleing i okazało się, że problem może być spowodowany tym, że programista. serwer jest 64-bitowy, a serwer QA ma 32-bitową. Ponieważ nie mam dostępu do serwerów mojego klienta, wdrożyłem go na innym serwerze 32-bitowym i stwierdziłem, że skróty pasują nawet do serwera 32-bitowego (funkcja działa zgodnie z oczekiwaniami?).

Spojrzałem również na this question.

tutaj jest funkcja I napisał:

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

Moje pytania są; jaki może być powód, dla którego funkcja zwraca różne wartości? Czy problem dotyczy mojej funkcji?

+3

Być może ma to coś wspólnego z różnymi lokalizacjami? Czy próbowałeś zastąpić 'aResponse.GetResponseStream()' stałą wartością i sprawdzić, czy problem nadal występuje? –

+1

Czy strona pod tym adresem URL zmienia się między połączeniami? – Oded

+0

@ErikSchierboom: Nie, nie zrobiłem tego. Teraz spróbuję. Dziękuję –

Odpowiedz

1

Spróbuj dodać rejestrację. Najpierw pobierz plik do napisu (zapisz go gdzieś na dysku, aby porównać go później). Następnie obliczyć hasz na dysku. Miałem taki problem w jednym z moich projektów, aw tym przypadku problemy dotyczyły serwera proxy, który dodał coś do odpowiedzi. Ale bez pliku na dysku nie można ich porównać.

Powiązane problemy