LINUX.ORG.RU

алгоритм gzip


0

0


копировал файлы tar.gz по фтп, как потом оказалось в ascii mode, в результате получил битые файлы все 0Ah заменены на 0D0Ah.
Обратно преобразовать невозможно из-за того что в файлах уже были законные 0D0Ah.
Вопрос можно ли опираясь на знание алгоритма gzip определить какие 0D0Ah менять на 0Ah, а какие нет?

anonymous
Ответ на: комментарий от aa5779

>нельзя. И алгоритм gzip тут, в общем-то ни при чем :)

Тем не менее я знаю человека, который это делал. Правда с compress-ом, но разница, должно быть, небольшая. Долбаться, правда, немало. Идея такова: 1.разжимаешь до ошибки, 2.жмешь обратно, 3.смотришь размер получившегося файла, 4.ищешь в исходном место для "\r\n", следующий за этой позицией, исправляешь его, 5. разжимаешь исправленое, если прорвался дальше - продолжаешь с п2, иначе откатываешь последнее изменение, ищешь следующее место для п4.

И так до победного конца.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Спасибо. Малой кровью тут не обойтись.

Кроме того нашелся резервный хард с этого компа (там Solaris 8), а файлы которые я перекатывал по ftp (командой /usr/ucb/ftp из Solaris) достаточно старые и на этом харде имеются.

anonymous
()

>все 0Ah заменены на 0D0Ah
Что-то меня берет сомнение что это все что произшло плохого.
Если это действительно все отличие что есть, то наверное пар 0D0Ah не так уже много, можно посчитать их количество. Если их скажем 8 то это означает что всего может быть 256 комбинаций. Дальше пишем программку которая на входе берет файл заменяет в нем пары 0D0Ah на 0Ah в соответсвии с переданным ей числом и записывает в другой файл. Дальше пишем скрипт который вызывает эту программку передает ей в цикле числа от нуля до 255 и натравливает на получающийся файл gzip до тех пор пока он не разожмет без ошибок. Еcли очень нужно могу помочь такую программку написать.

Или изучаем алгоритм gzip и анализируем данные в ручную !

anonymous
()
Ответ на: комментарий от anonymous

Почему бы и нет ? :) Задача прекрасно паралеллится :) Все зависит от цены вопроса.

anonymous
()
Ответ на: комментарий от anonymous

Какова вероятность появления в случайном потоке данных байта 0D перед байтом 0A? Ответ: 1/256.

ansky ★★★★★
()
Ответ на: комментарий от anonymous

Выше правильно предложили, пытаться распаковывать до первой ошибки, и подбирать эти биты поочередно. Получается полиномиальная сложность.

anonymous
()
Ответ на: комментарий от DonkeyHot

Эту идею можно реализовать кодом.. имхо прога будет нужная Ж)

godexsoft
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.