javascript - nodejs 加密的 Hmac sha256 base64 和 CryptoJS 不同

标签 javascript node.js angular cryptojs

假设我们有简单的消息和 key :

消息='简单'

private_key = '123456789'; 在带有 CryptoJS 的 Angular 项目中使用它:

const signature = CryptoJS.HmacSHA256('simple', '123456789');
const signatureBase = signature.toString(CryptoJS.enc.Base64);

我的结果是:

lvs7rQTe1EDTLAS1GVWWsNG5ZaYVCh9aaYc+NoEunC4=

在 msg 中使用它并在 Node 中键入:

var hmacsignature = crypto.createHmac('sha256', new Buffer("123456789", "base64"))
.update("simple")
.digest()
.toString('base64');

结果是:

nYu2PGqfRDWnHbT649q0gc+7DcIq8iwcwHAQQa5T2HY=

你能告诉我哪一个是正确的以及如何得到相同的东西是 Angular 吗?

谢谢

最佳答案

在浏览器中字符串编码通常是 UTF-8,所以使用 UTF-8 作为字符串编码应该可以解决这个问题。顺便说一句,您应该在两侧显式设置字符串编码以确保获得相同的结果。

var hmacsignature = crypto.createHmac('sha256', Buffer.from('123456789', 'utf8'))
.update("simple")
.digest()
.toString('base64');

并且 new Buffer(string) 已弃用,如果可以,请使用 Buffer.from(string[, encoding])

关于javascript - nodejs 加密的 Hmac sha256 base64 和 CryptoJS 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48964610/

相关文章:

node.js - 如何减少 NodeJS/Mongoose 中的代码重复

Angular 2 获取父路由

angular - 如何在 Angular 中处理来自 @input 的数据?

mysql - 在 sails.js 中,如何在模型的 beforeCreate 方法中访问 session 变量?

css - 移除 Material Stepper header

javascript - 万能 cookies 的制作方法

javascript - 向每个列表项添加当前状态

javascript - Canvas 中字体字符的几何旋转

javascript - IE 9 中的 pdf.js。警告 : Unhandled rejection: Error: Access is denied

javascript - 在nodejs中,生成直接stdout和stderr到日志文件不起作用