代码之家  ›  专栏  ›  技术社区  ›  Shreyas Pednekar

TypeError:无法读取未定义CryptoJS的属性“0”

  •  0
  • Shreyas Pednekar  · 技术社区  · 6 年前

    我在我的angular应用程序中使用CryptoJS来实现AES加密,但我一直在 TypeError: Cannot read property '0' of undefined 尝试在IV中发送空的16字节数组时出错

    error

    aesEncrypt(keys: string, value: string) { // encrypt api request parameter with aes secretkey
    
        var key = CryptoJS.enc.Utf8.parse(keys);
        //var iv = CryptoJS.enc.Utf8.parse(keys);
        var iv = new Uint16Array(16);
        var encrypted = CryptoJS.AES.encrypt(JSON.stringify(value), key,
            {
                //keySize: 256,
                keySize: 128,
                iv: iv,
                mode: CryptoJS.mode.CBC,
                padding: CryptoJS.pad.Pkcs7,
            });
    
        return encrypted.toString();
    }
    

    .NET代码:

    private static AesCryptoServiceProvider AesCryptoServiceProvider(string key)
    {
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.KeySize = 128;
        aes.BlockSize = 128;
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;
        aes.Key = Encoding.UTF8.GetBytes(key);
        //aes.IV = Encoding.UTF8.GetBytes(key);
        aes.IV = new byte[16];
        return aes;
    }
    

    public static String encryptURLEncoding(byte[] key, String encryption) throws GeneralSecurityException 
    {
        if (key.length != 16) 
        {
            throw new IllegalArgumentException("Invalid key size.");
        }
    
        // Setup AES tool.
    
        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(new byte[16]));
        byte[] dstBuff = cipher.doFinal(encryption.getBytes());
        String encryptedStringData = android.util.Base64.encodeToString(dstBuff, android.util.Base64.DEFAULT);
        return encryptedStringData;
    }
    

    我想通过提供空的16字节数组来实现AES加密解密,因为这个应用程序与我在android、ios平台上使用相同加密设置的其他应用程序互连,但我的angular应用程序中出现错误,如何解决此问题?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Topaco    6 年前

    WordArray . 自从 0 -IV在C代码中使用,这也必须在JavaScript代码中完成。相应的 字数组 可能是例如。

    var iv = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");
    

    Hex encoder 使用16字节 0 -IV对应32 0

    也要注意,一般来说 0 -IV只能用于测试目的。实际上,出于安全原因,必须为每个加密生成一个随机IV。此外,密钥/IV对只能使用一次。

    加密JS keySize 却忽略了它。使用的AES变体由密钥大小决定,例如,对于32字节的密钥,应用AES-256, here