【问题标题】:Decrypt AES 256 CBC using crypto-js使用 crypto-js 解密 AES 256 CBC
【发布时间】:2022-09-27 20:24:16
【问题描述】:

我有以下密钥可以将 erUF9SRCNQZPCBezVGzYYnUVgwAKZTvXzS5Zhgw6B/4= 解密为 \"54545fwfwefweffvfdv\",我尝试搜索类似的问题,但由于缺乏加密知识,我无法自己解决这个问题。

function getDecryptedCode() {
var key = CryptoJS.enc.Utf8.parse(\'JM@q@MM8AAxVV\');
var iv = CryptoJS.enc.Utf8.parse(\'\');
var ciphertext = CryptoJS.enc.Base64.parse(\"erUF9SRCNQZPCBezVGzYYnUVgwAKZTvXzS5Zhgw6B/4=\");
var encryptedCP = CryptoJS.lib.CipherParams.create({
  ciphertext: ciphertext,
  formatter: CryptoJS.format.OpenSSL
});
var decryptedWA = CryptoJS.AES.decrypt(encryptedCP, key, {
  iv: iv
});
var decryptedUtf8 = decryptedWA.toString(CryptoJS.enc.Utf8);

return decryptedUtf8;

}

console.log(getDecryptedCode());

  • 这里有什么问题?
  • 他们不解密数据并返回空值!
  • 对于 CBC 模式下的 AES,您需要相同的密钥和 IV 进行加密和解密。你的 IV 是空的,所以它不能工作。数据是用 CryptoJS 还是其他框架加密的?
  • 您的数据不一致:AES 不允许使用 13 字节的密钥。也可以排除将密钥材料解释为密码短语,因为密文必须以 U2FsdGVkX1 开头(因为 CryptoJS 的内置 KDF 以 Base64 编码的 OpenSSL 格式返回密文,该格式以 ASCII 编码开头Salted__)。
  • 用另一个框架加密的数据

标签: javascript reactjs encryption cryptojs


【解决方案1】:

经过多次尝试,我发现这是由输出反馈模式(OFB)产生的

var key = CryptoJS.enc.Utf8.parse('JM@q@MM8AAxVV');
var iv = CryptoJS.enc.Utf8.parse('');
var ciphertext = CryptoJS.enc.Base64.parse("erUF9SRCNQZPCBezVGzYYnUVgwAKZTvXzS5Zhgw6B/4=");
var encryptedCP = CryptoJS.lib.CipherParams.create({
    ciphertext: ciphertext,
    formatter: CryptoJS.format.OpenSSL
});
var decryptedWA = CryptoJS.AES.decrypt(encryptedCP, key, {
    iv: iv,
    mode: CryptoJS.mode.OFB
});
var decryptedUtf8 = decryptedWA.toString(CryptoJS.enc.Base64);
return decryptedUtf8;

参考链接:https://cryptojs.gitbook.io/docs/#block-modes-and-padding

【讨论】:

    猜你喜欢
    • 2014-02-06
    • 1970-01-01
    • 2013-08-11
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多