Мені потрібно заархівувати файл і захистити його паролем. Чи є для цього хороша (безкоштовна) бібліотека?
Це має відкрити третя сторона, тому захист паролем повинен працювати зі стандартними інструментами.
Мені потрібно заархівувати файл і захистити його паролем. Чи є для цього хороша (безкоштовна) бібліотека?
Це має відкрити третя сторона, тому захист паролем повинен працювати зі стандартними інструментами.
Відповіді:
ОНОВЛЕННЯ 2020: Зараз є й інші варіанти, зокрема Zip4J .
Після довгих пошуків я знайшов три підходи:
Доступний набір вихідного коду, придатний для одного файлу zip. Однак ліцензії немає. Використання - AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID=1526137 )
ОНОВЛЕННЯ: Цей код тепер ліцензовано та випущено Apache за адресою https://github.com/mobsandgeeks/winzipaes (експортовано з оригінального дому за кодом Google ). Це спрацювало для мене (один файл у 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-файлів, будь ласка, переконайтесь, що ви використовуєте один із суворих стандартів шифрування (я вважаю, що найкраще підтримується 128- та 256-бітний стандарт AES WinZip). Ось технічні характеристики - ми використовували це під час розробки власної системи ZIP, зашифрованої Java (не можемо надати джерело - вибачте - це лише для внутрішнього використання)
Єдине, що гірше, ніж відсутність шифрування, це думка, що у вас є шифрування, і помилка :-)
7-Zip має можливість додати пароль у режимі командного рядка. Можливо, ви можете виконати його, щоб отримати такий результат (і він також має хороший коефіцієнт стиснення).
Недоліки: зовнішній процес, який важко зробити портативним (навіть якщо 7-Zip є самим портативним), не впевнений у ліцензії на розповсюдження.
Зауважте, що утиліта Zip InfoZip, дуже портативна, також підтримує пароль.
Ви також можете спробувати 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-шифрування чітко визначений: див. Примітку до програми PKWARE щодо формату файлу .ZIP. Здається, це шифрування, здійснене в зашифрованому потоці. Якщо хтось захоче його кодувати ...
Тепер мені цікаво, чому Sun не включив його до своєї бібліотеки? Відсутність стандарту? Патентне / юридичне питання? Занадто слабкий, щоб бути придатним для використання?
Чи є для цього хороша (безкоштовна) бібліотека?
java.util.zip зробить архівування, але не зробить паролі. І ні, я не знаю жодного вільного, який би це зробив. Найдешевше, що я бачив, - 150 доларів за місце розробника.