2013-03-18 8 views
8

Ich benötige ein bestimmtes Stück Logik zur Verschlüsselung in Java in C# konvertiert werden Java-Code-Snippet ist wie folgt.Java MessageDigest-Klasse in C#

Was wäre das C# -Äquivalent für die Funktionen update(), Digest und Reset?

Antwort

7

In C# ist die Klasse HashAlgorithm.

Das entspricht entweder TransformBlock(...) oder TransformFinalBlock(...), nachdem der letzte Block Version aufgerufen wird zu aktualisieren (Sie können auch einen leeren Eingang verwenden können) können Sie die Hash Eigentum nennen kann, dass Sie den Digest-Wert geben wird.

HashAlgorithm ist wahrscheinlich wiederverwendbar sein, nachdem letzte Block genannt wird (was bedeutet, dass es für das nächste Mal zurückgesetzt wird Sie TransformBlock nennen), können Sie doppelt überprüfen, ob Ihr HashAlogrithm unterstützt bei allen Wiederverwendung von der Eigenschaft CanReuseTransform überprüfen.

Das Äquivalent zu Ihrer reset()/digest() Kombination ist eine einzeilige byte[] ComputerHash(byte[]).

-1
try { 
     MessageDigest md = MessageDigest.getInstance("SHA-1"); 
     md.update(password.getBytes()); 
     BigInteger hash = new BigInteger(1, md.digest()); 
     hashword = hash.toString(16); 
} catch (NoSuchAlgorithmException ex) { 
     /* error handling */ 
} 
return hashword; 
public static string HashPassword(string input) 
{ 
    var sha1 = SHA1Managed.Create(); 
    byte[] inputBytes = Encoding.ASCII.GetBytes(input); 
    byte[] outputBytes = sha1.ComputeHash(inputBytes); 
    return BitConverter.ToString(outputBytes).Replace("-", "").ToLower(); 
} 
0

Für eine Digest in C#, ähnlich wie Java, können Sie die Klasse Windows.Security.Cryptography.Core verwenden. Z. B. gibt die folgenden Verfahren zum Herstellen eines SHA256 Hash, formatiert in Base64:

public static string sha256Hash(string data) 
{ 
    // create buffer and specify encoding format (here utf8) 
    IBuffer input = CryptographicBuffer.ConvertStringToBinary(data, 
    BinaryStringEncoding.Utf8); 

    // select algorithm 
    var hasher = HashAlgorithmProvider.OpenAlgorithm("SHA256"); 
    IBuffer hashed = hasher.HashData(input); 

    // return hash in base64 format 
    return CryptographicBuffer.EncodeToBase64String(hashed); 
} 

See (mbrit):

How to create SHA-256 hashes in WinRT?