2015-07-01 12 views
6

Se hash la stringa "password" in C# utilizzando SHA256 utilizzando il metodo seguito ottengo questo come la mia uscita:SHA256 hash della stringa in C# non è d'accordo con hash sul sito

e201065d0554652615c320c00a1d5bc8edca469d72c2790e24152d0c1e2b6189 

Ma this website(SHA-256 produces a 256-bit (32-byte) hash value) mi dice l'ha è:

5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 

Sto chiaramente avendo un problema di formato di dati o qualcosa di simile. Qualche idea sul perché questo metodo C# SHA256Managed sta restituendo qualcosa di diverso? Sto inviando il metodo "password" come parametro di input.

private static string CalculateSHA256Hash(string text) 
    { 
     UnicodeEncoding UE = new UnicodeEncoding(); 
     byte[] hashValue; 
     byte[] message = UE.GetBytes(text); 

     SHA256Managed hashString = new SHA256Managed(); 
     string hex = ""; 

     hashValue = hashString.ComputeHash(message); 
     foreach (byte x in hashValue) 
     { 
      hex += String.Format("{0:x2}", x); 
     } 
     return hex; 
    } 
+2

Non utilizzare gli hash SHA256 per memorizzare le password (presupponendo che si stia progettando da zero). Si prega di leggere i metodi moderni di memorizzazione delle password, si dovrebbe usare qualcosa del genere: https://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes(v=vs.110).aspx o qualche altro metodo di multi-iterazione. – willaien

+1

Grazie per il link. Stiamo utilizzando SHA256, il backend sta salando in modo univoco per l'utente e non siamo un doppio hashing. Sembra che un miglioramento che possiamo fare sia utilizzare PBKDF2 invece di SHA256. – LampShade

risposta

13

UnicodeEncoding è UTF-16, garantito per gonfiare tutti i tuoi personaggi per due a quattro byte per rappresentare il loro punto di codice Unicode (si veda anche la sezione Osservazioni su MSDN).

Utilizzare (lo statico) Encoding.UTF8, quindi la maggior parte dei caratteri si adatta a un byte. Dipende dal sistema di cui hai bisogno per simulare se funzionerà per tutte le stringhe.

+0

Ecco, grazie! – LampShade

Problemi correlati