2010-11-17 18 views
10

Sto lavorando a un'applicazione Windows Phone 7. Sto usando this implementation per l'hashing MD5 in silverlight.MD5 hash in silverlight

Sto usando questo codice -

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

Ma, io non sto ottenendo il hash MD5 corretta per l'ingresso fornisco. Non sono sicuro di cosa non funzioni questo codice. Se qualcuno ha usato this implementation per l'hashing MD5 in silverlight, sai dove ho sbagliato?

+1

Come nota, MD5 potrebbe essere considerato ormai obsoleto - non è sicuro. Consiglio di utilizzare un'implementazione della famiglia SHA. –

+0

Perché pensi che sia sbagliato? A cosa stai confrontando? Ci sono commenti sulla pagina a cui ti colleghi che dicono che è bacato e non dovrebbe essere usato –

+0

@Mr. Delusione Sto lavorando con un'API di terze parti e quindi non spetta davvero a me decidere. – pavanred

risposta

11

stai tornando la versione esadecimale del di ingresso, non l'hash:

foreach (byte b in bs) 

dovrebbe essere

foreach (byte b in hash) 

(Un'alternativa è quella di utilizzare Convert.ToBase64String(hash) se non ti dispiace essendo in Base64 anziché in hex).

+0

Oh, mi sento così stupido. Dovrei averlo notato. Grazie – pavanred

+5

@Pavanred Beh, puoi fare in modo che la paperella di gomma smetta di sentirsi stupida :) http://en.wikipedia.org/wiki/Rubber_duck_debugging –

4

C'è già una risposta accettata per questo, ma per gli altri che usano MD5 in Silverlight o Windows Phone, sto pubblicando un collegamento a another implementation di MD5 con cui ho avuto più successo.

Ho passato diverse ore a battere la testa contro il muro con l'implementazione menzionata dal post originale, cercando di farlo funzionare nel mio progetto Windows Phone. Funzionava in alcuni casi e non in altri.

La versione di Jeff Wilcox funzionava perfettamente.