gpt4 book ai didi

java - 如何将 Java 中的 Sha-512 哈希转换为其等效的 Node.js

转载 作者:行者123 更新时间:2023-12-03 12:16:34 25 4
gpt4 key购买 nike

我在 Java 中有一个简单的哈希函数,我用 Node.js 重写了它,但它们产生了不同的结果。

这是Java:

public static String get_SHA_512_SecurePassword(String str, String customerId) {
try {
MessageDigest instance = MessageDigest.getInstance("SHA-512");
instance.update(customerId.getBytes(StandardCharsets.UTF_8));
byte[] digest = instance.digest(str.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(Integer.toString((b & 255) + 256, 16).substring(1));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}

这是我生成的 Node.js 等效项。

let crypto = require('crypto');

function get_SHA_512_SecurePassword(str, customerId) {
let hash = crypto.createHash('sha512')
hash.update(customerId, 'utf8')
let value = hash.digest(str, 'uft8')
console.log(value.toString('hex'))
return value.toString('hex');
}

任何人都可以解释我做错了什么或者如果我正确复制它们为什么不同?

最佳答案

你已经很接近了,问题是 .digest函数在 Node.js 中不带参数,所以我们调用 .update两次,一次使用 customerId,然后使用 str。我们实际上不需要将字符串编码传递给 .update 函数,因为 utf8 是默认编码。

const crypto = require('crypto');

function get_SHA_512_SecurePassword(str, customerId) {
const hash = crypto.createHash('sha512');
const digest = hash.update(customerId, "utf-8").update(str, "utf-8").digest();
return digest.toString("hex");
}

console.log(get_SHA_512_SecurePassword("hello", "world"));

这个 Node.js 示例输出:

3e64afa1cb7d643aa36f63b8d092ad76b1f04ff557abbb3d05f5b9037abf68a6606a8885d51bec8f6f39ee7d0badd504241c3704e777a51c21a9723e285fb9b8

这应该与 Java 代码的输出相同。

关于java - 如何将 Java 中的 Sha-512 哈希转换为其等效的 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66651609/

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