如何加密 java 7z 存档?

问题描述 投票:0回答:3

我正在使用 Apache Commons Compress 来压缩文件。 如何为存档添加密码?

public static void main(String args[]) throws FileNotFoundException, IOException {
SevenZOutputFile sevenZOutput = new SevenZOutputFile(new File("outFile.7z"));
File entryFile = new File("D:/image.jpg");
SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(entryFile, entryFile.getName());
sevenZOutput.putArchiveEntry(entry);
FileInputStream in = new FileInputStream(entryFile);
                int len;
                byte buffer[] = new byte[8192];
                int transferedMegaBytes2=0;
                while ((len = in.read(buffer)) > 0) {
                    sevenZOutput.write(buffer, 0, len);                    
                    transferredBytes += len;
                    int transferedMegaBytes = (int) (transferredBytes / 1048576);                          
                    if(transferedMegaBytes>transferedMegaBytes2){
                    System.out.println("Transferred: " + transferedMegaBytes + " Megabytes.");
                    transferedMegaBytes2=transferedMegaBytes;
                    }
                }
sevenZOutput.closeArchiveEntry();
sevenZOutput.close();    
}
java password-encryption apache-commons-compress
3个回答
0
投票

恐怕不支持压缩。您可能想使用这个 JNI 包装器

如果你这样做,你可能会失去平台独立性。 (他们说它是跨平台的,但我不会打赌)


0
投票

我认为您不能使用 Commons compress。来自 Apache Commons 压缩站点的 examples 部分:

我们目前仅提供对 lzma、arj、dump 和 Z.arj 的读取支持 只能读取未压缩的存档,7z可以读取有很多压缩包的存档 7z 支持但 不支持的压缩和加密算法 写入档案时支持加密


0
投票

自从 commons-compress 库于 2023 年发布版本 1.23 以来,SevenZOutputFile 类的构造函数接受 password 作为第二个参数(即 https://commons.apache.org/proper/commons-compress) /examples.html#Encrypted_7z_Archives ).

char[] password = "my strong password".toCharArray();
File outputFile = new File("/tmp/7zipOutputWithPassword.7z");
SevenZOutputFile sevenZOutputFile = new SevenZOutputFile(outputFile, password);
© www.soinside.com 2019 - 2024. All rights reserved.