2010-11-17 16 views
10

Pracuję nad aplikacją Windows phone 7. Używam this implementation do mieszania MD5 w silverlight.Skrót MD5 w silverlight

Używam tego kodu -

protected string GetMD5Hash(string input) 
    { 
     byte[] bs = System.Text.Encoding.UTF8.GetBytes(input); 
     MD5Managed md5 = new MD5Managed(); 
     byte[] hash = md5.ComputeHash(bs); 

     StringBuilder sb = new StringBuilder(); 
     foreach (byte b in bs) 
     { 
      sb.Append(b.ToString("x2").ToLower()); 
     } 

     return sb.ToString();  
    } 

Ale ja nie otrzymuję poprawny hash MD5 dla wejścia I dostarczyć. Nie jestem pewien, co jest nie tak z tym kodem. Jeśli ktoś użył this implementation do mieszania MD5 w silverlight, czy wiesz, gdzie się pomyliłem?

+1

Na marginesie, MD5 może już teraz zostać uznany za przestarzały - nie jest bezpieczny. Zalecam użycie implementacji rodziny SHA. –

+0

Dlaczego uważasz, że jest źle? Z czym to porównujesz? Istnieją komentarze na temat strony, do której prowadzi link, że są błędne i nie powinny być używane. –

+0

@Mr. Rozczarowanie Pracuję z interfejsem API innej firmy, więc nie muszę decydować. – pavanred

Odpowiedz

11

Wracasz wersję sześciokątną na wejściunie hash:

foreach (byte b in bs) 

powinny być

foreach (byte b in hash) 

(Alternatywą jest użycie Convert.ToBase64String(hash) jeśli nie przeszkadza jest w Base64 zamiast w hex.)

+0

Och, czuję się taki głupi. Powinienem to zauważyć. Dzięki – pavanred

+5

@Pavanred Cóż, można uzyskać gumową ducky, aby przestać czuć się głupio :) http://en.wikipedia.org/wiki/Rubber_duck_debugging –

4

Istnieje już akceptowana odpowiedź na to, ale dla innych, którzy używają MD5 w Silverlight lub Windows Phone, publikuję link do another implementation MD5, z którym miałem więcej sukcesów.

Spędziłem kilka godzin uderzając głową o ścianę za pomocą implementacji wspomnianej przez oryginalny post, próbując uruchomić go w moim projekcie Windows Phone. W niektórych przypadkach działało, a nie w innych.

Wersja Jeffa Wilcoxa działała idealnie.