假设我们有简单的消息和 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/