使用缓冲流解决该问题
问题描述: 使用Java中的AES加密算法加密文件时,会导致加密后文件大小发生变化,甚至比原文件更大。
解决方法: 将输入流和输出流包装成缓冲流,以减少读写磁盘的次数,可以有效减小文件大小变化的问题。
代码示例:
// 定义缓存大小
int bufferSize = 4096;
// 创建加密器
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
try(
FileInputStream inputStream = new FileInputStream(srcFile);
FileOutputStream outputStream = new FileOutputStream(dstFile);
// 使用BufferedInputStream和BufferedOutputStream
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, bufferSize);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream, bufferSize);
) {
byte[] buffer = new byte[bufferSize];
int bytesRead;
// 读取数据,加密并写入缓冲流
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
byte[] encryptedData = cipher.update(buffer, 0, bytesRead);
bufferedOutputStream.write(encryptedData);
}
// 写入最后的加密数据
byte[] encryptedData = cipher.doFinal();
bufferedOutputStream.write(encryptedData);
}