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

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

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

Ответ 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, очень портативная, также поддерживает пароль.

Ответ 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 за место разработчика.