【发布时间】:2020-12-08 17:42:07
【问题描述】:
我的部分应用程序使用 AES 256 来解密加密字符串,然后将其传递给检查解密字符串是否正确的函数。
当我提供正确的密钥时,一切正常 - 我得到了 81 sigBytes 的 wordArray 对象。然后我将对象更改为十六进制,我很高兴。但是,当密钥不正确时,返回的 wordArray 具有奇怪的 sigBytes 负值,在尝试将其更改为十六进制代码后,我得到空字符串,而实际上我应该得到 81 个字节的错误解密文本。
请注意,我的应用程序的其余部分的编码方式是 hexKey 始终为 32 字节,iv 始终为 16 字节,因此此问题与密钥长度错误无关。
export function decryptAES(enc, hexKey, iv) {
var key = CryptoJS.enc.Hex.parse(hexKey);
var iv = CryptoJS.enc.Hex.parse(iv);
var dec = CryptoJS.AES.decrypt(
enc,
key,
{ iv: iv },
{ mode: CryptoJS.mode.CBC }
);
console.log("++++");
console.log(dec);
console.log(dec.toString());
console.log("++++");
return dec.toString();
}
给出正确的 32 字节密钥时的示例输出:
++++
Object {
"sigBytes": 81,
"words": Array [
1752134516,
778401904,
776304752,
1869505902,
1949643824,
909129059,
808662581,
909653861,
1717724773,
912536165,
1701012016,
845308723,
1667446839,
825385784,
1697855799,
909391927,
1630822707,
959669046,
1664365625,
962670905,
856624911,
252645135,
252645135,
252645135,
],
}
686f73742e6578702e4578706f6e656e7435343036303563303336353638376566626665366432656563623032626333636338373132633865333937363438376134613339336336633434393961313933
++++
32字节密钥不正确时的输出
++++
Object {
"sigBytes": -106,
"words": Array [
-1250329685,
718732109,
2110917137,
138597379,
457610406,
-1386250595,
98533977,
1688834468,
1693475717,
-1223868012,
779204504,
-893340479,
1667438189,
2014283040,
-1303465345,
-2113084121,
1618406295,
-965279870,
1579488178,
-1274259478,
1900642657,
340456508,
-1297174274,
1109264330,
],
}
++++
【问题讨论】:
-
这是在浏览器还是在nodejs环境中执行?如果您在节点环境中,我建议您使用内置的 crypto 库。
-
我使用 react native 和 expo
标签: javascript react-native cryptography aes cryptojs