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"; 进行复制。你的secrettypeof 是什么? 感谢 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 加密解密

有关使用CryptoJS的AES方法进行加密和解密,后台获取前端生成的公钥进行AES加密。前端js如何使用私钥解密

功能强大的JS加密库-CryptoJS

CryptoJS和Java进行加解密

CryptoJS中WordArray