c# - 将 java sha512crypt 转换为 c#

标签 c# java encryption salt sha512

我正在尝试将以下 JAVA 代码复制到 C# 中,但我认为我做得不对 o_o

(代码取自ftp://ftp.arlut.utexas.edu/pub/java_hashes/Sha512Crypt.java)

JAVA 变量:

ctx, alt_ctx = 消息摘要

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 = 哈希算法(SHA512托管)

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

感谢您的帮助

最佳答案

因此,在进行了一些彻底的测试之后,我将我的 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# - 将 java sha512crypt 转换为 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7837652/

相关文章:

java - java.util.regex.Pattern 可以进行部分匹配吗?

java - PDFBox 2.0.8 签署文档时出现问题

security - 如何防止重放攻击

c# - 没有具有键 'IEnumerable<SelectListItem>' 的 'Carrera' 类型的 ViewData 项

c# - 基于矢量的生成器是创建条形码的最佳方式吗?

c# - 在 RavenDB 中存储/检索动态数据

java - 如何在 Java 源代码中存储 key 而不是人类可读的

c# - Dapper:如何从查询中读入字典列表?

java - 使用 ArrayList<Class?> 进行转换?

encryption - 短(6 位)加密 key 散列