Внедрение 7Zip в JAVA - PullRequest
       12

Внедрение 7Zip в JAVA

2 голосов
/ 13 августа 2010

Я скачал LZMA SDK с сайта 7zip, но, к моему разочарованию, он поддерживает только сжатие и распаковку и не поддерживает шифрование AES.Кто-нибудь знает, есть ли какая-либо реализация 7zip с AES crypto полностью в JAVA ?.Спасибо.

С уважением, Кал.

Ответы [ 2 ]

3 голосов
/ 05 октября 2010

По данным 7Zip команды:

LZMA SDK не поддерживает шифрование методы. Используйте 7-Zip исходный код вместо этого.

Исходный код доступен на ассемблере, C и C ++, их можно вызвать из Java.

2 голосов
/ 26 января 2019

Из документации Apache Common-Compress:

Обратите внимание, что Commons Compress в настоящее время поддерживает только подмножество алгоритмов сжатия и шифрования, используемых для архивов 7z.Для записи только несжатых записей поддерживаются LZMA, LZMA2, BZIP2 и Deflate - в дополнение к этим чтениям поддерживаются AES-256 / SHA-256 и DEFLATE64.

Если вы используете 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>

Обратите внимание: org.tukaani: xzтребуется только для 7zip.Зависимости общего сжатия не нужны для других поддерживаемых форматов сжатия.

...