0

我正在尝试将以下 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)

key 和 salt 与 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以寻求帮助。然而,这并没有给我相同的输出,也没有任何 # 轮要做。

鉴于“beta”这个词,我试图最终复制以下内容(一行)

$6$rounds=60000$ZIFtW/dNUcD/k$O57sTkYwuRpQcgpnIdKLShfCVR7.vGzfMhvvWn7Mg8trGJsWADChhs6S5ONybnSBWHEHIQKw66a4i/YrA4y/y1

谢谢你的帮助

4

1 回答 1

1

因此,在进行了一些彻底的测试之后,我将我的 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);  
于 2011-10-21T13:54:00.240 回答