Рекомендації щодо безкоштовної бібліотеки для архівування файлів [закрито]


75

Мені потрібно заархівувати файл і захистити його паролем. Чи є для цього хороша (безкоштовна) бібліотека?

Це має відкрити третя сторона, тому захист паролем повинен працювати зі стандартними інструментами.


9
Як закрилось таке корисне запитання?
Дмитро Зайцев

2
Тому що Мета вирішила, що корисні запитання, які могли б злегка перетворитися на питання думки, не призначені для StackOverflow. Це сумно, але правда.
user314104

Zip4j підтримує шифрування списку файлів: stackoverflow.com/questions/15085249 / ...
kinjelom

Відповіді:


35

ОНОВЛЕННЯ 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


Хтось має посилання на те, як використовувати код winzipaes, розміщений у цьому посиланні? Мені потрібно додати більше одного файлу, і я міг би допомогти зрозуміти, як ним користуватися
frak

@frak Подивіться на вихідний код AesFileEncrypter: все, що вам потрібно зробити, це створити екземпляр цього класу, а потім додати до нього все, що завгодно.
Крістофер Шульц,

1
winzipaes доступний через Maven репо mvnrepository.com/artifact/de.idyl/winzipaes
Marc

54

Ви можете спробувати Zip4j , чисту бібліотеку Java для обробки файлу zip. Він підтримує шифрування / дешифрування методів шифрування PKWare та AES.

Ключові риси:

  • Створення, додавання, вилучення, оновлення, видалення файлів із Zip-файлу
  • Читання / запис захищених паролем файлів ZIP
  • Підтримує шифрування AES 128/256
  • Підтримує стандартне шифрування Zip
  • Підтримує формат Zip64
  • Підтримує метод стиснення Store (Без стиснення) та Deflate
  • Створення або вилучення файлів із розділених файлів Zip (Наприклад: z01, z02, ... zip)
  • Підтримує імена файлів Unicode
  • Монітор прогресу

Ліцензія:


1
І це прекрасно працює і з Android :) Чудова бібліотека з чудовими прикладами +1!
Джей Сідрі,

5
Схоже, від Zip4j покинули: - /
Патрік Корнеліссен

все ще працює, хоча.
Deniss M.

1
@PatrickCornelissen Від нього відмовились протягом декількох років, але знову підтримали з середини 2019 року
Шрікант Редді Лінгала

12

Це не відповідь, але це обережність, про яку слід пам’ятати, оцінюючи потенційні рішення.

Одна дуже важлива річ щодо шифрування zip:

Існує кілька типів шифрування zip. Старий тип (частина оригінального zip-стандарту) взагалі не варто турбуватися (його можна зламати менш ніж за 10 хвилин за допомогою програм, легко доступних в Інтернеті).

Якщо ви робите будь-яке шифрування zip-файлів, будь ласка, переконайтесь, що ви використовуєте один із суворих стандартів шифрування (я вважаю, що найкраще підтримується 128- та 256-бітний стандарт AES WinZip). Ось технічні характеристики - ми використовували це під час розробки власної системи ZIP, зашифрованої Java (не можемо надати джерело - вибачте - це лише для внутрішнього використання)

Єдине, що гірше, ніж відсутність шифрування, це думка, що у вас є шифрування, і помилка :-)


2
Можливо, ви захочете підтримати обидва. Файли ZIP, зашифровані AES, aFAIK ще не підтримуються Провідником Windows, тоді як файли ZIP, зашифровані PKZIP, є. Ви можете переглядати записи будь-якого типу зашифрованого zip-файлу, але ви можете отримати лише із зашифрованого PKZIP (слабко зашифрованого) файлу zip за допомогою Провідника Windows. Вам потрібен WinZip або інший відповідний інструмент у Windows, щоб відкрити зашифровані AES-файли. (Безкоштовний DotNetZip постачається з таким інструментом).
Cheeso

У Windows XP SP3 та Vista обидва підтримують файли zip AES. Моя думка (з якою всі вільні не погодитись) полягає в тому, що підтримка чогось, що навіть не є захищеним віддалено, є поганою ідеєю. M $, що не підтримує захищений формат, не є вагомою причиною реалізації чогось, що є небезпечним.
Кевін Дей

Створені Winzipaes (див. Вище) .zip-файли не відкриваються на моєму оновленому образі Windows XP тут, Windows стогне про непідтримувану схему стиснення. Однак вони відкриваються штрафом із 7z.
Том Чівертон,

4

7-Zip має можливість додати пароль у режимі командного рядка. Можливо, ви можете виконати його, щоб отримати такий результат (і він також має хороший коефіцієнт стиснення).

Недоліки: зовнішній процес, який важко зробити портативним (навіть якщо 7-Zip є самим портативним), не впевнений у ліцензії на розповсюдження.

Зауважте, що утиліта Zip InfoZip, дуже портативна, також підтримує пароль.


Я вважаю, що 7-zip має бібліотеки для використання в програмах, що самостійно пишуться, тому це не повинно бути зовнішнім процесом.
Quagmire

@Quagmire 7-zip не має власної збірки Java (за винятком алгоритму LZMA), тому використання 7z для роботи з ZIP-файлами потребуватиме зовнішнього процесу.
Крістофер Шульц,

@ChristopherSchultz справді. Припускаю, можна також написати оболонку JNI або JNA, щоб менше проблем.
PhiLho

Також варто зазначити, що "пароль", сумісний із ZIP 2.0, жахливо зламаний, і його не слід використовувати ні для чого іншого, крім як заважати малюкам переглядати ваші файли.
Крістофер Шульц,

3

Ви також можете спробувати TrueZip. Дивіться наступні посилання щодо функцій: https://christian-schlichtherle.bitbucket.io/truezip/

Наступника TrueZip можна знайти тут: https://christian-schlichtherle.bitbucket.io/truevfs/


1
Я хотів би бачити це раніше, Zip4j добре, але це краще. Зокрема, він обробляє більш широкий спектр вхідних даних, таких як саморозпаковування та вкладені zip-файли та математика, і не відмовляється від нього.
чебрець

2

Ось приклад використання 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".

Примітка: мені незрозуміло, чому потрібно двічі вказувати пароль у коді вище. Я не знаю, що сталося б, якби ви використовували різні паролі в цих двох місцях.


1

Якщо ви надаєте кращий сценарій використання, тоді є інші альтернативи.

  1. Вам потрібно, щоб ZIP-файл відкривався за допомогою стандартних інструментів Zip, які можуть обробляти ZIP-пароль?
  2. Те саме питання, що і попереднє, ви збираєтесь передати цей zip зовнішній сутності, яка повинна відкрити zip?
  3. Це лише для внутрішнього використання, і ви просто хочете захистити вміст zip-файлу?

Тоді для 3 ви можете просто використовувати java для шифрування вмісту потоку zip як звичайного файлу, мабуть, найкраще змінити розширення файлу на .ezip або дещо.

Для 1 і 2 тоді ви можете використовувати розчин chillkat, як згадано, або еквівалент. Однак майте на увазі, що chillkat не є чистим рішенням Java, він використовує JNI.


Chillkat не "безкоштовний", це пробна версія.
Джеймс Шек,

1

Додаткова інформація: Я погуглив трохи більше, і справді, це досить поширене питання, і, схоже, безкоштовного рішення немає (поки що?).

Тепер стандартний алгоритм Zip-шифрування чітко визначений: див. Примітку до програми PKWARE щодо формату файлу .ZIP. Здається, це шифрування, здійснене в зашифрованому потоці. Якщо хтось захоче його кодувати ...

Тепер мені цікаво, чому Sun не включив його до своєї бібліотеки? Відсутність стандарту? Патентне / юридичне питання? Занадто слабкий, щоб бути придатним для використання?


Я зробив саме це близько 5 років тому для одного з наших додатків. Це зайняло певні зусилля (і, на жаль, я не можу надати для нього поштовий індекс) - але добре знати, що це можна зробити. Ми фактично впровадили потужну систему шифрування AES, яку просуває WinZip.
Кевін Дей

0

Чи є для цього хороша (безкоштовна) бібліотека?

java.util.zip зробить архівування, але не зробить паролі. І ні, я не знаю жодного вільного, який би це зробив. Найдешевше, що я бачив, - 150 доларів за місце розробника.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.