Пароли в формате zip-файла применяются к данным ввода сжатого файла. Это означает, что для zip-файла нет единого пароля. В zip-файле есть N записей zip, и каждая из них может иметь отдельный пароль или вообще не иметь пароля. Иногда вы получаете zip-файлы, которые используют один и тот же пароль для всех записей, но это не требуется спецификацией и не вызывается DotNetZip.
Используя DotNetZip, вы можете неявно считывать «центральный каталог» zip-файла, чтобы получить список файлов (или записей) в zip-файле без использования пароля. Еще раз, помните, что пароль применяется к записи zip, а не к самому файлу zip.
Итак, как-то так:
using (var zip = ZipFile.Read("myzip.zip")) {
foreach (var e in zip.Entries) {
System.Console.WriteLine("Entry: {0}", e.FileName);
}
}
... распечатает список имен записей в zip-файле, независимо от того, защищена ли какая-либо из записей паролем.
Если вы хотите попытаться «взломать» пароль для защищенной паролем записи, вы можете повторно позвонить ZipEntry.ExtractWithPassword(password)
. Это вызовет исключение для неверного пароля.
Я думаю, если бы вы серьезно относились к взлому почтового индекса, вы бы делали это на C или C ++, используя гораздо более умный алгоритм.