Преобразование Java SHA512Crypt в C#
-
27-10-2019 - |
Вопрос
Я пытаюсь дублировать следующий код Java в C#, но я не думаю, что делаю это правильно O_O
(Код взят из ftp://ftp.arlut.utexas.edu/pub/java_hashes/sha512crypt.java)
Java переменные:
ctx, alt_ctx = messagegestest
key = string (пароль к хэш)
Salt = String (соль, чтобы добавить в хэш)
/* ---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# переменные:
ctx, alt_ctx = hashalgorithm (SHA512 ManAnaged)
Ключ и соль такие же, как на 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
//?????????????????????????????????????????????????????????//
Как я уже сказал, уверен, что это неправильно ... интересно, знает ли кто -нибудь точный перевод.
Я также смотрел на http://www.obviex.com/samples/hash.aspx за помощь. Это, однако, не дает мне такого же результата и не имеет никаких раундов.
Учитывая слово «бета», я пытаюсь в конечном итоге повторить следующее (одна строка)
$ 6 $ раунды = 60000 $ ZIFTW/DNUCD/K $ O57STKYWURPQCGPNIDKLSHFCVR7.VGZFMHVVWN7MG8TRGJSWADCHHS6S5ONYBNSBWHEHIQKW66A4I/YRA4Y/Y1
Спасибо за вашу помощь
Решение
Таким образом, после некоторого тщательного тестирования я исправил свой C# к следующему, что кажется эквивалентным ...
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);