Вопрос

Я пытаюсь дублировать следующий код 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);  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top