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