gpt4 book ai didi

java - 当您多次执行 MessageDigest.update 时,MessageDigest 在做什么?

转载 作者:行者123 更新时间:2023-11-30 07:22:26 24 4
gpt4 key购买 nike

我有一个 Java 方法,我正在将其移植到 C#,该方法使用盐对字符串进行哈希处理。该方法执行如下操作。

private byte[] hash(byte[] bytes, byte[] salt) {
MessageDigest digester = MessageDigest.getInstance("SHA-256");
digester.update(salt);
digester.update(bytes);
byte[] hashed = digester.digest();
return hashed;
}

我不明白的是双重更新功能正在做什么。它实际上在做什么吗?

This question was reposted becauase it was wrongfully marked as duplicate. I found an answer and decided to share.

最佳答案

Java 中的 MessageDigest 和 C# 中的 HashAlgorithm 之间的区别在于 MessageDigest 是有状态的,而 HashAlgorithm 则不是。调用 MessageDigest.update 时,您会将提供的字节数组附加到 MessageDigest 中的字节数组。当 MessageDigest.digest 被调用时,它会重置。

在 C# 中,由于 HashAlgorith 不是有状态的,因此它只是对提供的内容进行哈希处理。问题中哈希函数的等效 c# 方法如下...

private byte[] Hash(byte[] bytes, byte[] salt)
{
HashAlgorithm sha256 = new SHA256CryptoServiceProvider();
byte[] combined = salt.Concat(bytes).ToArray();
byte[] hashed = sha256.ComputeHash(combined);
return hashed;
}

关于java - 当您多次执行 MessageDigest.update 时,MessageDigest 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com