JAVA中7Zip的实现

发布于 2024-09-14 15:59:12 字数 116 浏览 3 评论 0原文

我已经从 7zip 网站下载了 LZMA SDK,但令我失望的是它只支持压缩和解压缩,不支持 AES 加密。有谁知道是否有完全在 JAVA 中使用 AES 加密的 7zip 实现?谢谢。

问候, 卡尔。

I have downloaded the LZMA SDK from the 7zip website but to my disappointment it does only support compression and decompression and does not support AES crypto. Does anyone know if there is any implementation of 7zip with AES crypto completely in JAVA?. Thanks.

Regards,
Kal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

轻许诺言 2024-09-21 15:59:12

来自 apache common-compress 文档:

请注意,Commons Compress 目前仅支持用于 7z 存档的压缩和加密算法的子集。对于仅写入未压缩的条目,除了支持 AES-256/SHA-256 和 DEFLATE64 之外,还支持 LZMA、LZMA2、BZIP2 和 Deflate。

如果您使用 common-compress,您可能不会遇到代码可移植性问题,因为您不必嵌入任何本机库。

下面的代码显示了如何迭代 7zip 存档中的文件并将其内容打印到标准输出。您可以根据 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>

请注意:仅 7zip 需要 org.tukaani:xz。 common-compress 依赖项对于其他支持的压缩格式不需要它。

From apache common-compress documentation:

Note that Commons Compress currently only supports a subset of compression and encryption algorithms used for 7z archives. For writing only uncompressed entries, LZMA, LZMA2, BZIP2 and Deflate are supported - in addition to those reading supports AES-256/SHA-256 and DEFLATE64.

If you use common-compress you probably will not have issues with portability of your code as you don't have to embed any native libraries.

Below code shows how to iterate over files within 7zip archive and print its contents to stdout. You can adapt it for AES requirements :

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();
        }
    }
}

Imports used:

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 Dependencies Used:

    <!-- 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>

Please note: org.tukaani:xz is required for 7zip only. common-compress dependency doesn't need it for other supported compression formats.

_畞蕅 2024-09-21 15:59:12

根据 7Zip 团队的说法:

LZMA SDK 不支持加密
方法。使用 7-Zip 源代码
相反。

源代码提供汇编、C 和 C++ 版本,您可以从 Java 调用它们。

According 7Zip team:

LZMA SDK doesn't support crypto
methods. Use 7-Zip source code
instead.

The source code is available in assembler, C and C++, you can call them from Java.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文