我正在尝试编写一个 java 代码,它可以压缩 .7z 格式的任何文件并使用 AES 256 对其进行加密。基本上我有一个用例,我需要通过 java 代码压缩和加密文件并将其发送给用户。然后他使用 7zip 软件解压缩文件,并提供一个密码,用于在他的 Windows 机器中加密文件。我能够实现第一步,即压缩为 .7z,但我尝试了很多不同的 AES 256 加密逻辑。压缩文件是加密的,但我无法在 7zip Windows 软件中解压缩和解密它。我已经给出了我用来压缩的java代码。任何人都可以通过添加 AES 256 加密逻辑来帮助完成它,稍后可以在 7zip 软件中解压缩和解密。
import java.io.*;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.apache.commons.compress.archivers.sevenz.*;
public class LZMACompressionExample {
public static void main(String[] args) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
String inputFilePath = "D:\\f\\test.txt";
String outputFilePath = "D:\\c\\test.7z";
System.out.println("File compression completed.");
// create 7z archive with original file name
SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File(outputFilePath));
SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(new File(inputFilePath), new File(inputFilePath).getName());
sevenZOutput.putArchiveEntry(entry);
// write compressed data to 7z archive
FileInputStream compressedFileInputStream = new FileInputStream(inputFilePath);
byte[] compressedBuffer = new byte[1024];
int compressedLen;
while ((compressedLen = compressedFileInputStream.read(compressedBuffer)) > 0) {
sevenZOutput.write(compressedBuffer, 0, compressedLen);
}
// close streams
sevenZOutput.closeArchiveEntry();
compressedFileInputStream.close();
sevenZOutput.close();
System.out.println("File compressed and saved in .7z format with original file name inside.");
}
}
我尝试了很多 AES 256 加密 java 逻辑。该文件正在加密,但无法在 7zip Windows 软件中打开。它抛出以下错误。