gpt4 book ai didi

java - 如何将 Node JS HMAC 签名创建更改为 Java

转载 作者:行者123 更新时间:2023-11-30 10:20:28 24 4
gpt4 key购买 nike

我很少使用 Java,我需要在 Node.js 中转换一个函数,该函数为 Java 的 REST POST 调用构建 HMAC 签名

Node JS 函数:

function buildSignature(buf, secret) {
const hmac = crypto.createHmac('sha256', Buffer.from(secret, 'utf8'));
hmac.update(buf);
return hmac.digest('hex');
}

我目前所做的是:

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);

String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));
System.out.println(hash);

结果不一样。

最佳答案

我怀疑 hmac.digest('hex'); 不是 base 64 编码的。我会尝试将 sha256_HMAC.doFinal(message.getBytes()) 的响应转换为十六进制。

How to convert a byte array to a hex string in Java?

我更喜欢那里的答案(因为我在许多项目中使用 Guava)是

final String hex = BaseEncoding.base16().lowerCase().encode(bytes);

适应你的问题会是

final String hash = BaseEncoding.base16().lowerCase().encode(sha256_HMAC.doFinal(message.getBytes()));

关于java - 如何将 Node JS HMAC 签名创建更改为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48201114/

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