0

My task is to decrypt AES-128 in CBC Mode as I already have to encrypted hex string and the key (also in hex). I have tried a simple code like:

function doDecrypt(){
    var encryptedData = "1d4c76364618b6efce62258353f89810"
    var key = "11112222333344445555666677778888"; 

    encryptedData = CryptoJS.enc.Hex.parse(encryptedData);
    key = CryptoJS.enc.Hex.parse(key);

        var decrypted = CryptoJS.AES.decrypt(encryptedData, key);
    alert(CryptoJS.enc.Hex.stringify(decrypted));
}

The result I get is just a blank word array (in "decrpyted"), can anyone point out that where did i do wrong please?

do I need an additional information such as iv, salt or not?

4

1 回答 1

3

“CBC 模式下的 AES-128”不是数据格式。没有通用的方法可以将加密数据连同所需的元数据一起写入。你需要知道你得到了什么以及它是如何产生的。然后你可以在大多数情况下弄清楚如何用 CryptoJS 实现相同的功能。特别是,您需要了解以下内容:

  • 什么算法?“AES-128”是模棱两可的。它可能意味着“具有 128 位密钥大小的 AES”,也可能意味着“具有 128 块大小和其他密钥大小的 AES”。
  • 什么密钥大小(见上文)
  • 什么模式?(你已经回答了这个问题:它是 CBC。)
  • 什么是填充?最常见的是 PKCS#7,但可能没有填充。(对于 CBC 模式,几乎可以肯定是 PKCS#7。)
  • 什么是静脉注射?CBC总是有静脉注射。有时该 IV 被错误地设置为 NULL(这使得 CBC 不太安全)。IV 可能是从密码以某种方式生成的(这就是 OpenSSL 的工作原理)。
  • 您是否有好的密钥、不安全的密钥或密码。一个好的密钥是一系列与密钥大小相同的随机字节。不安全的密钥是指将密码视为密钥(通过将人工键入的字母复制到密钥缓冲区中)。这是非常不安全的,但很常见。
  • 如果您有正确的密码,那么使用什么 KDF 和参数将其转换为密钥?例如,他们是否使用了 OpenSSL KDF 或 PBKDF2 或 bcrypt 或 scrypt?
  • 是否有任何其他元数据,例如 HMAC?(需要 HMAC 来保护 AES-CBC。没有它,攻击者有时可以修改密文以解密为所需的明文。)

当你有这些答案时,你就可以弄清楚如何用 CryptoJS 来实现它。

于 2013-02-11T17:49:17.497 回答