Konvertieren von Java SHA512Crypt in C#
-
27-10-2019 - |
Frage
Ich versuche, den folgenden Java -Code in C# zu duplizieren, aber ich glaube nicht, dass ich es richtig mache O_O
(Der Code wird von entnommen ftp://ftp.arlut.utexas.edu/pub/java_hashes/sha512crypt.java)
Java -Variablen:
CTX, Alt_ctx = MessagedIGest
Key = String (das Passwort zu Hash)
salz = Schnur (Salz zum Hash hinzuzufügen)
/* ---JAVA--- //
////////////////////////////////////////////////////
ctx.reset();
ctx.update(key, 0, key.length);
ctx.update(salt, 0, salt.length);
alt_ctx.reset();
alt_ctx.update(key, 0, key.length);
alt_ctx.update(salt, 0, salt.length);
alt_ctx.update(key, 0, key.length);
alt_result = alt_ctx.Digest();
//////////////////////////////////////////////////*/
C# Variablen:
CTX, ALT_CTX = Hashalgorithmus (SHA512Managed)
Schlüssel und Salz sind gleich wie in Java ...
// --- C# EQUIV ? --- //
int TESTINGINT;
ctx = null;
ctx = new SHA512Managed();
ctx.TransformBlock(key, 0, key.Length, key, 0);
ctx.TransformBlock(salt, 0, salt.Length, salt, 0);
alt_ctx = null;
alt_ctx = new SHA512Managed();
alt_ctx.TransformBlock(key, 0, key.Length, key, 0);
alt_ctx.TransformBlock(salt, 0, salt.Length, salt, 0);
alt_ctx.TransformBlock(key, 0, key.Length, key, 0);
alt_result = alt_ctx.TransformFinalBlock(key, 0, key.Length); //most likely wrong here
//?????????????????????????????????????????????????????????//
Wie ich bereits sagte, ist sich ziemlich sicher, dass dies falsch ist ... Ich frage mich, ob jemand die genaue Übersetzung kennt.
Ich habe mich auch angesehen http://www.obviex.com/samples/hash.aspx für etwas Hilfe. Dies gibt mir jedoch nicht die gleiche Ausgabe und hat keine # Runden zu tun.
Angesichts des Wortes "Beta" versuche ich letztendlich Folgendes zu replizieren (eine Zeile)
$ 6 $ Runden = 60000 $ Ziftw/dnucd/k $ o57stkywurpqcgpnidklshfcvr7.vgzfmhvwn7mg8Trgjswadchhs6s5onybnsbwhehehehehehehehhehehhehehhehehh66a4i/yra4y/y1/y1/y1/y11/y11/y1/y11bnsbwhehehehehehehhehehheheheh.
Danke für Ihre Hilfe
Lösung
Nachdem ich ein paar gründliche Tests durchgeführt habe, habe ich mein C# auf das Folgende festgelegt, was das Äquivalent zu sein scheint ...
ctx = new SHA512Managed();
byte[] digestA = new byte[key.Length + salt.Length];
ctx.TransformBlock(key, 0, key.Length, digestA, 0);
ctx.TransformBlock(salt, 0, salt.Length, digestA, key.Length);
byte[] digestB = new byte[key.Length * 2 + salt.Length];
ctx.TransformBlock(key, 0, key.Length, digestB, 0);
ctx.TransformBlock(salt, 0, salt.Length, digestB, key.Length);
ctx.TransformBlock(key, 0, key.Length, digestB, key.Length + salt.Length);
alt_ctx = new SHA512Managed();
alt_result = alt_ctx.ComputeHash(digestB);