преобразование java sha512crypt в c # - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь скопировать следующий код JAVA в C #, но я не думаю, что я делаю это правильно o_o

(Код взят из ftp: //ftp.arlut.utexas.edu/pub/java_hashes/Sha512Crypt.java)

Переменные JAVA:

ctx, alt_ctx = MessageDigest

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 (SHA512Managed)

ключи соль такие же, как в 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 * * * 10 * 10 / год / год / год

1 Ответ

1 голос
/ 21 октября 2011

Итак, после тщательного тестирования я исправил свой 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);  
...