CryptoJS:key.clamp 不是一个函数
Posted
技术标签:
【中文标题】CryptoJS:key.clamp 不是一个函数【英文标题】:CryptoJS : key.clamp is not a function 【发布时间】:2018-12-16 19:05:18 【问题描述】:TypeError: key.clamp is not a function
at Object.init (path/node_modules/crypto-js/hmac.js:58:18)
当我尝试使用下面的相关代码在 javascript 中创建 JWT 时出现上述错误。
const CryptoJS = require('crypto-js');
var hash = CryptoJS.HmacSHA256(token.join("."), secret);
crypto-js/hmac.js:58:18 有key.clamp();
,我不确定什么是最好的方法。我尝试使用HmacSHA512
,但它返回相同的错误。
我正在与npm 6.1.0
node v6.10.3
crypto-js ^3.1.9-1
一起跑步。
【问题讨论】:
我无法使用token = ["a","b"]
和secret = "mySecret";
进行复制。你的secret
的typeof
是什么?
感谢 Adelin,typeof
secret
是对象。
我不确定他们是否打算这样做。在所有their samples 中,他们使用的是string
【参考方案1】:
来自their samples、secret
(或他们所说的key
)应该是string
。
因此,像这样使用CryptoJS
应该可以正常工作:
const token = "a,b"; // fake token
const secret = CryptoJS.enc.Utf8.parse("mySecret"); //encode mySecret into UTF-8 as suggested in the comments
const CryptoJS = require('crypto-js');
var hash = CryptoJS.HmacSHA256(token.split(","), secret);
console.log(hash);
【讨论】:
我收到There was an error in evaluating the Pre-request Script: TypeError: r.clamp is not a function
你知道为什么吗?刚刚复制了你的例子
这段代码对我有用。如果它对您不起作用,可能是因为您使用了有问题的加密版本(尝试更新),或者因为您的代码有错误(如果是这种情况,请尝试发布另一个问题)
我在某处读到问题是因为我首先需要将 mySecret 编码为 UTF-8。然后它工作了
CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(plainTextPassword));
但我将它用于 base64 编码。也许我搞砸了你的代码哈哈以上是关于CryptoJS:key.clamp 不是一个函数的主要内容,如果未能解决你的问题,请参考以下文章
CryptoJS 中 CFB 模式中的 mcrypt_encrypt 函数
【uniapp】Vue.js CryptoJs 中的 3des 加密解密