Рекомендации по бесплатной библиотеке, которую можно использовать для архивирования файлов [закрыто]
-
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)
- Поддерживает имена файлов в Юникоде.
- Монитор прогресса
Лицензия:
- Zip4j выпущен под Лицензия Apache, версия 2.0.
Это не ответ, но следует помнить об этом при оценке потенциальных решений.
Одна очень важная вещь о 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".
Примечание: мне непонятно, почему необходимо дважды указывать пароль в приведенном выше коде. Я не знаю, что случилось бы, если бы вы использовали разные пароли в этих двух местах. Р>
Если вы дадите лучший вариант использования, тогда есть другие альтернативы.
<Ол>Для 3 тогда вы можете просто использовать java для шифрования содержимого потока zip как обычного файла, вероятно, лучше всего изменить расширение файла на .ezip или что-то подобное.
Для 1 и 2 вы можете использовать chillkat , как уже упоминалось, или эквивалент. Однако следует помнить, что chillkat не является чисто Java-решением, оно использует JNI.
Дополнительная информация: я немного погуглил, и это действительно довольно распространенный вопрос, и кажется, что нет бесплатного решения (пока?).
Теперь стандартный алгоритм Zip-шифрования четко определен: см. Замечание по применению в формате файла .ZIP. Похоже, шифрование выполняется в зашифрованном потоке. Если кому-то хочется его кодировать ...
Теперь мне интересно, почему Sun не включила его в свою библиотеку? Отсутствие стандарта? Патент / правовой вопрос? Слишком слабый, чтобы его можно было использовать?
Есть ли хорошая (бесплатная) библиотека для этого?
java.util.zip выполнит архивирование, но не будет выполнять пароли. И нет, я не знаю ни одной бесплатной, которая будет. Самый дешевый , который я видел, составляет 150 долларов за место разработчика.