我已经从7zip网站下载了LZMA SDK但令我失望的是它只支持压缩和解压缩,并且不支持AES加密。有没有人知道在JAVA中是否有完全使用AES加密的7zip实现?感谢。
此致 卡尔。
答案 0 :(得分:3)
根据7Zip团队:
LZMA SDK不支持加密 方法。使用7-Zip源代码 代替。
源代码在汇编程序,C和C ++中可用,您可以从Java调用它们。
答案 1 :(得分:2)
来自apache common-compress文档:
请注意,Commons Compress当前仅支持用于7z存档的压缩和加密算法的子集。对于仅写入未压缩的条目,支持LZMA,LZMA2,BZIP2和Deflate-除了那些读取支持AES-256 / SHA-256和DEFLATE64。
如果您使用common-compress,则由于不必嵌入任何本机库,因此可能不会出现代码可移植性问题。
下面的代码显示如何遍历7zip归档文件中的文件并将其内容打印到stdout。您可以根据AES要求对其进行调整:
public static void showContent(String archiveFilename) throws IOException {
if (archiveFilename == null) {
return;
}
try (SevenZFile sevenZFile = new SevenZFile(new File(archiveFilename))) {
SevenZArchiveEntry entry = sevenZFile.getNextEntry();
while (entry != null) {
final byte[] contents = new byte[(int) entry.getSize()];
int off = 0;
while ((off < contents.length)) {
final int bytesRead = sevenZFile.read(contents, off, contents.length - off);
off += bytesRead;
}
System.out.println(new String(contents, "UTF-8"));
entry = sevenZFile.getNextEntry();
}
}
}
使用的进口:
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
使用的Maven依赖项:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>org.tukaani</groupId>
<artifactId>xz</artifactId>
<version>1.6</version>
</dependency>
请注意:org.tukaani:xz仅对于7zip是必需的。 common-compress依赖性在其他受支持的压缩格式中不需要。