Рекомендации по бесплатной библиотеке, которая будет использоваться для копирования файлов
Мне нужно защищать паролем и защищать паролем файл. Есть ли для этого хорошая (бесплатная) библиотека?
Это необходимо открыть третьей стороне, поэтому защита паролем должна работать со стандартными инструментами.
Ответы
Ответ 1
После долгих поисков я нашел три подхода:
Свободно доступный набор исходных кодов, подходящий для одного файла zip. Однако лицензии нет. Использование AesZipOutputStream.zipAndEcrypt(...).
http://merkert.de/de/info/zipaes/src.zip
(https://forums.oracle.com/forums/thread.jspa?threadID=1526137)
UPDATE: этот код теперь лицензирован и выпущен 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
Ответ 2
Вы можете попробовать Zip4j, чистую библиотеку java для обработки zip файла. Он поддерживает шифрование/дешифрование методов шифрования PKWare и AES.
Основные возможности:
- Создание, добавление, извлечение, обновление, удаление файлов из Zip файла
- Чтение/запись защищенных паролем Zip файлов
- Поддержка шифрования AES 128/256
- Поддержка стандартного шифрования почтовых индексов
- Поддержка формата Zip64
- Поддержка метода сжатия (без сжатия) и дефляции
- Создание или извлечение файлов из файлов Split Zip (например: z01, z02,... zip)
- Поддержка имен файлов Unicode
- Монитор хода
Лицензия:
Ответ 3
Это не ответ, но с осторожностью следует учитывать при оценке потенциальных решений.
Одна очень важная вещь в шифровании zip:
Существует несколько типов шифрования zip. Старый тип (часть оригинального стандарта zip) совсем не стоит беспокоиться (он может быть взломан менее чем за 10 минут, когда приложения легко доступны в Интернете).
Если вы делаете какие-либо шифрования zip файлов, пожалуйста, убедитесь, что вы используете один из сильных стандартов шифрования (я считаю, что WinZip 128- и 256-разрядный стандарт AES лучше всего поддерживается). Вот технические характеристики - мы использовали это при разработке собственной зашифрованной zip-системы Java (не можем предоставить источник - извините - это только внутреннее использование)
Единственное, что хуже, чем отсутствие шифрования, - это думать, что у вас есть шифрование и неправильное: -)
Ответ 4
7-Zip имеет возможность добавить пароль в режиме командной строки. Возможно, вы можете выполнить его, чтобы получить этот результат (и он также имеет хороший уровень сжатия).
Недостатки: внешний процесс, трудно сделать портативный (даже если 7-Zip переносится сам), не уверен в лицензии на распространение.
Обратите внимание, что утилита InfoZip Zip, очень портативная, также поддерживает пароль.
Ответ 5
Вы также можете попробовать TrueZip. См. Следующие ссылки для функций:
https://christian-schlichtherle.bitbucket.io/truezip/
Преемник TrueZip можно найти здесь:
https://christian-schlichtherle.bitbucket.io/truevfs/
Ответ 6
Вот пример использования 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, используя пароль "мой пароль".
Примечание: мне непонятно, почему нужно дважды указывать пароль в коде выше. Я не знаю, что произойдет, если вы будете использовать разные пароли в этих двух местах.
Ответ 7
Если вы даете лучший сценарий использования, тогда есть другие альтернативы.
- Вам нужно, чтобы zip открывался стандартными инструментами Zip, которые могут обрабатывать почтовый пароль?
- Тот же вопрос, что и предыдущий, вы собираетесь передать этот zip внешнему объекту, который должен открыть zip?
- Является ли он только внутренним, и вы просто хотите защитить содержимое zip?
Для 3 вы можете просто использовать java для шифрования содержимого потока zip в качестве обычного файла, возможно, лучше всего изменить расширение файла на .ezip или somesuch тоже.
Для 1 и 2 вы можете использовать chillkat, как упомянуто, или эквивалент.
Однако имейте в виду, что chillkat не является чистым Java-решением, он использует JNI.
Ответ 8
Дополнительная информация: Я googled немного больше и действительно, это довольно распространенный вопрос, и кажется, что нет бесплатного решения (пока?).
Теперь стандартный алгоритм шифрования Zip хорошо определен: см. PKWARE Замечание по применению в файле .ZIP формат. По-видимому, это шифрование выполняется в зашифрованном потоке. Если кто-то чувствует, что он кодирует его...
Теперь, интересно, почему Sun не включила его в свою библиотеку? Отсутствие стандарта? Патентно-правовой вопрос? Слишком слабый, чтобы его можно было использовать?
Ответ 9
Есть ли для этого хорошая (бесплатная) библиотека?
java.util.zip сделает zipping, но он не будет использовать пароли. И нет, я не знаю никаких свободных, которые будут. Самый дешевый, который я видел, составляет $150 за место разработчика.