Дешифровка Zip-архива
Процедура дешифрует файл зашифрованный архиватором zip. Следует заметить, что zip добавляет к каждому зашифрованному файлу заголовок шифровки состоящий из 12 байт, который представляет из себя набор случайных байт. Известно что последние два байта данного заголовка ни что иное как старшее слово контрольной суммы незашифрованного файла.
Структурно процедура состоит из четырех частей. Первая часть, имеет вспомогательное значение, в ней создается CRC-таблица, используемая в дальнейшем для преобразования ключей дешифрации, а так же непосредственно инициализируются три 32-байтных ключа. Во второй части ключи преобразуются, используя пароль. В третий части происходит преобразование ключей с одновременной расшифровкой 12-байтного заголовка файла, на этом этапе можно осуществить проверку пароля, если известна контрольная сумма дешифруемого файла (zip хранит ее в незакодированном виде). И наконец последняя, четвертая часть в которой происходит непосредственно побайтная дешифрация данных, при этом дешифрованный байт замещает соответстующий байт в исходном массиве.
На вход процедуры подаются следующие данные: n - длина пароля, P - массив содержащий пароль, buffer - 12-байтный заголовок, m - длина дешифруемого массива, stream - массив байт, который необходимо расшифровать. На выходе получаем расшифрованные данные в массиве stream при этом размер массива остается тем же m.
Как и при шифровке Blowfish-ем следует понимать, что не смотря на то, что алгоритм можно использовать без каких-либо изменений, скорость его работы может быть существенно оптимизирована при непосредственном кодировании на одном из языков программирования. Но я не ставлю себе такую задачу, и представляю этот алгоритм только в образовательных целях, конкретную же реализацию как и в большинстве случаев оставляя Вам.
alglib.sources.ru
|