我正在尝试在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);