使用AES / CBC / PKCS7时,Cipher.doFinal会修剪数据大小

时间:2018-10-30 15:00:58

标签: java android encryption cryptography aes

我正在尝试在Android上执行AES加密。我使用cipher.doFinal()方法加密数据。这适用于较小的数据,但是当我将其用于大型数据时会失败。当尝试加密长度为200k的大型数据(例如字节数组)时,最终结果是长度为70k的字节数组。这小于原始数据大小的一半。另外,解密同一张图像时,我可以确认结果。解密的图像仅是原始图像的1/3。奇怪的是,没有对密码的调用会引发任何异常,例如非法的块大小,非法的长度等。

我不确定如何进行此处以及加密大数据的正确方法是什么。这是用于生成密钥和加密数据的代码:

KeyGenParameterSpec parameterSpec = new KeyGenParameterSpec.Builder(
  ALIAS,
  KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
  .setBlockModes(BLOCK_MODE)
  .setEncryptionPaddings(PADDING)
  .setUserAuthenticationRequired(false)
  .build();
KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM, ANDROID_KEY_STORE);
keyGenerator.init(parameterSpec);

SecretKey key = keyGenerator.generateKey();

Cipher cipher = Cipher.getInstance(TRANSFORMATION);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);

byte[] encryptedData = cipher.doFinal(plainData);

0 个答案:

没有答案