以下是一个使用AES算法加密和解密多个文件的示例代码:
加密文件:
import javax.crypto.Cipher;
import javax.crypto.CipherOutputStream;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileEncryption {
private static final String KEY = "your_secret_key"; // 密钥,需要保密
public static void encryptFiles(String[] filePaths, String outputFilePath) {
try {
SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
FileOutputStream outputStream = new FileOutputStream(outputFilePath);
CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher);
for (String filePath : filePaths) {
File inputFile = new File(filePath);
FileInputStream inputStream = new FileInputStream(inputFile);
byte[] inputBytes = new byte[(int) inputFile.length()];
inputStream.read(inputBytes);
byte[] outputBytes = cipher.update(inputBytes);
cipherOutputStream.write(outputBytes);
inputStream.close();
}
byte[] finalOutputBytes = cipher.doFinal();
cipherOutputStream.write(finalOutputBytes);
cipherOutputStream.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String[] filePaths = {"file1.txt", "file2.txt", "file3.txt"};
String outputFilePath = "encrypted_files.enc";
encryptFiles(filePaths, outputFilePath);
}
}
解密文件:
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileDecryption {
private static final String KEY = "your_secret_key"; // 密钥,需要保密
public static void decryptFile(String inputFilePath, String[] outputFilePaths) {
try {
SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
FileInputStream inputStream = new FileInputStream(inputFilePath);
CipherInputStream cipherInputStream = new CipherInputStream(inputStream, cipher);
for (String outputFilePath : outputFilePaths) {
FileOutputStream outputStream = new FileOutputStream(outputFilePath);
byte[] inputBytes = new byte[1024];
int bytesRead;
while ((bytesRead = cipherInputStream.read(inputBytes)) != -1) {
byte[] outputBytes = cipher.update(inputBytes, 0, bytesRead);
outputStream.write(outputBytes);
}
outputStream.close();
}
byte[] finalOutputBytes = cipher.doFinal();
FileOutputStream finalOutputStream = new FileOutputStream(outputFilePaths[outputFilePaths.length - 1]);
finalOutputStream.write(finalOutputBytes);
finalOutputStream.close();
cipherInputStream.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String inputFilePath = "encrypted_files.enc";
String[] outputFilePaths = {"dec_file1.txt", "dec_file2.txt", "dec_file3.txt"};
decryptFile(inputFilePath, outputFilePaths);
}
}
请注意,在这些示例代码中,我们使用AES算法和预共享密钥对文件进行加密和解密。确保将your_secret_key替换为您自己的密钥,并且密钥是安全的。此外,为了简单起见,我们使用文件名字符串数组来表示要加密/解密的文件列表,并且将所有文件内容合并到一个输出文件中。您可以根据自己的需求进行相应的修改。