将java sha512crypt转换为c#

将java sha512crypt转换为c#,c#,java,encryption,salt,sha512,C#,Java,Encryption,Salt,Sha512,我试图将下面的JAVA代码复制到C中,但我认为我做得不对 (代码取自) JAVA变量: ctx,alt_ctx=MessageDigest key=String(散列的密码) salt=String(要添加到哈希中的盐) C#变量: ctx,alt_ctx=哈希算法(SHA512管理) 密钥和salt与JAVA中的相同 // --- C# EQUIV ? --- // int TESTINGINT

我试图将下面的JAVA代码复制到C中,但我认为我做得不对

(代码取自)

JAVA变量:

ctx,alt_ctx=MessageDigest

key=String(散列的密码)

salt=String(要添加到哈希中的盐)

C#变量:

ctx,alt_ctx=哈希算法(SHA512管理)

密钥和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

        //?????????????????????????????????????????????????????????//
就像我说的,很确定这是错的。。。想知道是否有人知道确切的翻译

我也一直在寻求帮助。然而,这并没有给我相同的输出,也没有任何轮要做

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

$6$rounds=60000$ZIFtW/dNUcD/k$O57sTkYwuRpQcgpnIdKLShfCVR7.vgzfmhvwn7mg8trgjswadchhs6s5onybnhiqkw66a4i/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);  

难道你不能通过运行代码并查看它是否工作来判断它是否“错误”吗?你试过了吗?结果如何?你的C代码不完整。您的变量甚至还没有声明。稍后在我的代码中,我遇到了参数异常,所以有点不对劲。@Ramhound这段代码不是我的完整程序,我已经删除了所有变量,如果您愿意,我可以发布它。。。
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);