You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CryptoJS实现AES加解密时遇TypeError错误求助

解决CryptoJS AES加密中的TypeError: Cannot read properties of undefined (reading '0')错误

错误原因

这个错误的核心问题是你调用CryptoJS.AES.encrypt的参数传递逻辑不对。当你直接传入WordArray类型的密钥时,CryptoJS会默认把它当作密码字符串处理,自动触发PBKDF2密钥派生流程,但这个流程需要盐值等必要参数,你的代码未提供,导致内部逻辑读取未定义属性时抛出错误。

解决方案

要直接使用生成的WordArray密钥,必须以对象形式明确指定加密参数,同时建议手动生成符合AES标准的初始化向量(IV),保证加密安全性:

修正后的完整代码

<!DOCTYPE html>
<html>
  <head>
    <title>AES Encryption Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
  </head>
  <body>
    <script>
      // 生成256位密钥(32字节)
      function generateKey() {
        return CryptoJS.lib.WordArray.random(32);
      }

      // 生成128位IV(AES块大小为128位,IV长度需与块大小一致)
      function generateIV() {
        return CryptoJS.lib.WordArray.random(16);
      }

      // 加密函数:明确传入密钥和IV参数
      function encryptAES(plaintext, key, iv) {
        const encrypted = CryptoJS.AES.encrypt(plaintext, key, {
          iv: iv,
          mode: CryptoJS.mode.CBC, // 显式指定默认的CBC模式
          padding: CryptoJS.pad.Pkcs7 // 显式指定默认的PKCS7填充
        });
        return encrypted.toString();
      }

      // 解密函数:需传入加密时使用的相同密钥和IV
      function decryptAES(ciphertext, key, iv) {
        const decrypted = CryptoJS.AES.decrypt(ciphertext, key, {
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        });
        return decrypted.toString(CryptoJS.enc.Utf8);
      }

      // 使用示例
      const plaintext = "Hello, World!";
      const key = generateKey();
      const iv = generateIV();

      console.log('明文:', plaintext);

      const ciphertext = encryptAES(plaintext, key, iv);
      console.log('密文:', ciphertext);

      const decryptedText = decryptAES(ciphertext, key, iv);
      console.log('解密后文本:', decryptedText);
    </script>
  </body>
</html>

补充说明

  • 你看到的“将明文转为字符串”的解决方案,仅适用于明文为非字符串类型(如WordArray)的场景,和你当前的密钥参数问题无关。
  • 若不想手动管理IV,CryptoJS默认会自动生成IV并嵌入加密结果,但仍需确保密钥以正确的参数形式传入,避免触发错误的密码派生逻辑。

内容的提问来源于stack exchange,提问作者Tiien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:12