Рекомендации по бесплатной библиотеке, которую можно использовать для архивирования файлов [закрыто]

StackOverflow https://stackoverflow.com/questions/166340

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне нужно заархивировать и защитить файл паролем.Есть ли для этого хорошая (бесплатная) библиотека?

Его необходимо открыть третьей стороне, поэтому защита паролем должна работать с помощью стандартных инструментов.

Это было полезно?

Решение

После долгих поисков я нашел три подхода:

Свободно доступный набор исходного кода, подходящий для одного файла zip. Тем не менее, нет лицензии. Использование AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID= 1526137 )

ОБНОВЛЕНИЕ. Этот код теперь лицензирован Apache и выпущен по адресу http://code.google.com/. p / winzipaes / . Это сработало для меня (один файл в zip) и хорошо заполняет дыру в библиотеках открытых исходных кодов Java.

Коммерческий продукт ($ 500 на момент написания). Я не могу проверить, работает ли это, поскольку их подход к пробной лицензии сложен. Это также портированное приложение .NET: http://www.nsoftware.com/ipworks/zip/default.aspx

Коммерческий продукт ($ 290 на момент написания). Подходит только для Wnidows, так как использует dll: http://www.example-code.com/java/zip.asp

Другие советы

Можешь попробовать Zip4j, чистая Java-библиотека для обработки zip-файлов.Он поддерживает шифрование/дешифрование методов шифрования PKWare и AES.

Ключевая особенность:

  • Создание, добавление, извлечение, обновление и удаление файлов из ZIP-файла.
  • Чтение/запись ZIP-файлов, защищенных паролем.
  • Поддерживает шифрование AES 128/256.
  • Поддерживает стандартное шифрование ZIP
  • Поддерживает формат Zip64.
  • Поддерживает методы сжатия Store (без сжатия) и Deflate.
  • Создание или извлечение файлов из файлов Split Zip (например:z01, z02,...zip)
  • Поддерживает имена файлов в Юникоде.
  • Монитор прогресса

Лицензия:

Это не ответ, но следует помнить об этом при оценке потенциальных решений.

Одна очень важная вещь о zip-шифровании:

Существует несколько типов zip-шифрования. Старый тип (часть оригинального стандарта zip) совсем не стоит беспокоить (его можно взломать менее чем за 10 минут с помощью приложений, легко доступных онлайн).

Если вы выполняете какое-либо шифрование zip-файлов, пожалуйста, убедитесь, что вы используете один из надежных стандартов шифрования (я считаю, что WinZip поддерживает 128-и 256-битный стандарт AES). Вот технические характеристики - мы использовали это при разработке нашей собственной зашифрованной zip-системы на Java (не могу предоставить источник - извините - это только для внутреннего использования)

Единственное, что хуже, чем отсутствие шифрования, это думать, что у вас есть шифрование и что вы не правы: -)

7-Zip может добавить пароль в режиме командной строки. Возможно, вы можете выполнить его, чтобы получить этот результат (и он также имеет хороший коэффициент сжатия).

Недостатки: внешний процесс, трудно сделать переносимым (даже если 7-Zip сам переносимый), не уверен в лицензии на распространение.

Обратите внимание, что утилита InfoZip Zip, которая также очень переносима, также поддерживает пароль.

Вы также можете попробовать TrueZip. Смотрите следующие ссылки для функций: https://christian-schlichtherle.bitbucket.io/truezip/

Преемник TrueZip можно найти здесь: https://christian-schlichtherle.bitbucket.io/truevfs/

Вот пример использования winzipaes 1.0.1. Обратите внимание, что это всего лишь суть, я не тестировал этот код именно в этой форме.

import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;

File aNewZipFile = new File("/tmp/foo.zip");
File existingUnzippedFile = new File("/tmp/src.txt");

// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0);  // The 0 is keySize, it is ignored for AESEncrypterBC

AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password"); 

// remember to close the zipEncrypter
zipEncrypter.close();

Вы можете их распаковать " /tmp/foo.zip" используя Winzip (v9 +) или 7za (то есть 7zip) на Mac, используя пароль "my-password".

Примечание: мне непонятно, почему необходимо дважды указывать пароль в приведенном выше коде. Я не знаю, что случилось бы, если бы вы использовали разные пароли в этих двух местах.

Если вы дадите лучший вариант использования, тогда есть другие альтернативы.

<Ол>
  • Требуете ли вы, чтобы почтовый индекс открывался стандартными инструментами Zip, которые могут обрабатывать почтовый пароль?
  • Тот же вопрос, что и в предыдущем случае, вы собираетесь передать этот почтовый индекс внешнему объекту, который должен открыть почтовый индекс?
  • Это только для внутреннего использования, и вы просто хотите защитить содержимое почтового индекса?
  • Для 3 тогда вы можете просто использовать java для шифрования содержимого потока zip как обычного файла, вероятно, лучше всего изменить расширение файла на .ezip или что-то подобное.

    Для 1 и 2 вы можете использовать chillkat , как уже упоминалось, или эквивалент. Однако следует помнить, что chillkat не является чисто Java-решением, оно использует JNI.

    Дополнительная информация: я немного погуглил, и это действительно довольно распространенный вопрос, и кажется, что нет бесплатного решения (пока?).

    Теперь стандартный алгоритм Zip-шифрования четко определен: см. Замечание по применению в формате файла .ZIP. Похоже, шифрование выполняется в зашифрованном потоке. Если кому-то хочется его кодировать ...

    Теперь мне интересно, почему Sun не включила его в свою библиотеку? Отсутствие стандарта? Патент / правовой вопрос? Слишком слабый, чтобы его можно было использовать?

      

    Есть ли хорошая (бесплатная) библиотека для этого?

    java.util.zip выполнит архивирование, но не будет выполнять пароли. И нет, я не знаю ни одной бесплатной, которая будет. Самый дешевый , который я видел, составляет 150 долларов за место разработчика.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top