作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很少使用 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/
我是一名优秀的程序员,十分优秀!