javascript - AES 解密在 forge 中失败,但在 crypto-js 中有效

标签 javascript cryptography

我正在定期解密消息字符串。在研究了多个 jsperf 之后,我注意到 forge 和 stanford 比 cryptojs 更快 - 我需要额外的速度,因为我必须支持较旧的移动设备,所以我正在尝试迁移。

这是工作 crpto-js 代码:

var feed = message.data.msg;
var iv = CryptoJS.enc.Hex.parse(_iv);
var key = CryptoJS.enc.Hex.parse(_key);

var decrypted = CryptoJS.AES.decrypt(feed.substr(32), key, { iv: iv });
feed = decrypted.toString(CryptoJS.enc.Utf8);

现在是非工作伪造代码:

var feed = message.data.msg;
var iv = forge.util.hexToBytes(_iv);
var key = forge.util.hexToBytes(_key);

var buffer = forge.util.createBuffer( feed.substr(32) );
var cipher = forge.aes.createDecryptionCipher(key);

cipher.start( iv );
cipher.update( buffer );
cipher.finish();

feed = cipher.output.toHex();

用 forge 解密后,我得到了随机困惑的字符。在单步执行代码时,唯一值得注意的是 forge/aes.js 第 969 行中的失败:

if(count > (Nb << 2)) {
    rval = false;
}

正在触发并返回 false。

我在这里不知所措,因为两个库都使用 CBC 作为 AES 的默认值,所以一切都应该正常工作。

最佳答案

您是否尝试过更改:

var buffer = forge.util.createBuffer( feed.substr(32) );

致:

var buffer = forge.util.createBuffer( forge.util.decode64( feed.substr(32) ) );

改变:

feed = cipher.output.toHex();

致:

feed = cipher.output.getBytes();

关于javascript - AES 解密在 forge 中失败,但在 crypto-js 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140185/

相关文章:

javascript - javascript中的自定义多维对象

c - C 字符串的轻量级(准随机)整数指纹

random - linux/dev/urandom 前向预测

python - 安装 Python 加密错误

security - 您将盐串存放在哪里?

javascript - Magento - opcheckout.js - 在结帐期间手动调用 setAddress()

javascript - Khan SmileyFace - 无限循环问题

javascript - 为什么包装我的 JS SignalR 回调我的 $(function() 使其不被触发?

c# - 如果我使用 HMACSha1 作为哈希算法,为什么 PasswordDeriveBytes 每次都会生成不同的 key ?

javascript - 使用 node-gd 对 png 缓冲区进行 Base64 编码