Я пытаюсь понять, как работает php gzdeflate / gzinflate.если я понимаю, это простой поток битов с трехбитным заголовком.Таким образом, можно было бы получить только первые биты и посмотреть, что сжато.Таким образом, взяв первые биты, мы можем теоретически (?) Извлечь байты за байтами?
Фактически я потерял несколько битов файла (около первых 40-50 байтов с некоторыми пропущенными битами, а не все биты,только некоторые из них).Я просто хочу знать, смогу ли я сделать умный "грубый удар", чтобы воссоздать первые байты, которые могут полностью gzdeflate () файл.Я знаю, что это PHP-код, поэтому извлеченные байты должны быть только ASCII.Я пытался перебить все биты, но это слишком долго.Так что, если бы я мог перебирать биты за битами, это было бы предпочтительнее.
(Если есть переопределение в python, которое читаемо, это мне очень поможет).Я прочитал http://www.zlib.net/feldspar.html, что больше о том, как сжать данных, я хочу распаковать его.
Спасибо
РЕДАКТИРОВАТЬ: Давайте возьмемпример.Вот мои данные (в шестнадцатеричном формате):
39e0 6fb2 41eb ....
Эти данные вычитаются из ключа.Этот ключ используется в шестнадцатеричном формате, поэтому у меня есть только 16 возможностей для каждого символа.
Алгоритм такой:
(ciphered - key) % 256 = deflate_data
Ключ в шестнадцатеричной форме.Первый ключ байта может быть только: 0x30 -> 0x39 и 0x61 -> 0x66. У меня есть только варианты (для ясности в младшем порядке, первый бит - это последний блок, два следующих бита - это тип кодирования):
Key -> deflate
0 -> 10010000 --> No, if .00 code, all other bits must be 00
1 -> 00010000 --> No, if .00 code, all other bits must be 00
2 -> 11100000 --> No, .11 is reserved
3 -> 01100000 --> No, .11 is reserved
4 -> 10100000 --> Maybe?
5 -> 00100000 --> Maybe?
6 -> 11000000 --> Maybe?
7 -> 01000000 --> Maybe?
8 -> 10000000 --> Uncompressed? Must check LEN and NLEN
9 -> 00000000 --> Uncompressed? Must check LEN and NLEN
a -> 00011011 --> No, .00 should hav all others bits to 0
b -> 11101011 --> No, .11 is reserved
c -> 01101011 --> No, .11 is reserved
d -> 10101011 --> Maybe?
e -> 00101011 --> Maybe?
f -> 11001011 --> Maybe?
поэтому первый байт моего ключа может быть: 4,5,6,7 или d, e, f.Некоторые из них использовали фиксированный словарь.Так возможно ли теоретически попробовать следующие байты?Другие байты являются динамическим словарем.Так возможно ли создать дерево Хаффмана со следующими байтами?Неправильный ключ, вероятно, приведет к невозможным деревьям Хаффмана.Когда у меня осталось немного возможностей, я могу попытаться перебить оставшиеся ключи.
8 и 9 могут быть легко протестированы.
Ключ сконструирован следующим образом:
MD5(pass[::-1])+MD5(pass[:len(pass)])
Таким образом, теоретически ключ может содержать от 32 до 50-60 символов в зависимости от длины ключа.