2013-06-08 24 views
20

Ich habe eine Zeichenfolge, und ich möchte es mit der Hash-Funktion SHA-256 mit C# Hash. Ich möchte etwas wie das:Erhalten Sie SHA-256 Zeichenfolge einer Zeichenfolge

string hashString = sha256_hash("samplestring"); 

Ist etwas in das Framework eingebaut, um dies zu tun?

+1

http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx. -1. –

+2

Hashes arbeiten an Bytes, nicht an Strings. Sie müssen also zuerst eine Codierung auswählen, die die Zeichenfolge in Bytes umwandelt. Ich empfehle UTF-8 dafür. – CodesInChaos

+0

Etwas sagt mir, dass Leute, die diesen Beitrag lesen, auch überprüfen sollten: https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi

Antwort

65

Die Umsetzung wie die

public static String sha256_hash(String value) { 
    StringBuilder Sb = new StringBuilder(); 

    using (SHA256 hash = SHA256Managed.Create()) { 
    Encoding enc = Encoding.UTF8; 
    Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

    foreach (Byte b in result) 
     Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 

bearbeiten könnte:Linq Implementierung ist prägnante, aber wahrscheinlich weniger lesbar:

public static String sha256_hash(String value) { 
    using (SHA256 hash = SHA256Managed.Create()) { 
    return String.Concat(hash 
     .ComputeHash(Encoding.UTF8.GetBytes(value)) 
     .Select(item => item.ToString("x2"))); 
    } 
} 

Edit 2 : .NET Core

public static String sha256_hash(string value) 
{ 
    StringBuilder Sb = new StringBuilder(); 

    using (var hash = SHA256.Create())    
    { 
     Encoding enc = Encoding.UTF8; 
     Byte[] result = hash.ComputeHash(enc.GetBytes(value)); 

     foreach (Byte b in result) 
      Sb.Append(b.ToString("x2")); 
    } 

    return Sb.ToString(); 
} 
+0

Wie würden Sie den Hash wieder in das Passwort entschlüsseln? –

+6

@daniel metlitski: Sie * kann nicht *: Hash ist * Einwegfunktion *, Sie können Hash berechnen, aber das Argument nicht zurück erhalten. Wenn Sie einen neuen Benutzer registrieren, speichern Sie nicht das Passwort, sondern dessen Hash; Bei der Authentifizierung berechnen Sie Hash für das bereitgestellte Passwort und vergleichen Sie den Hash mit dem gespeicherten Hash. –

+0

Alles ist cool, aber Ihre Namenskonvention ist schrecklich - lokale Variablen Großbuchstaben, Methodennamen Kleinbuchstaben - hier ist ein guter Vortrag für einen Abend: https://docs.microsoft.com/en-us/dotnet/standard/design- Richtlinien/Allgemeine Namenskonventionen –

Verwandte Themen