Я пытаюсь распаковать и повторно сжать определенный фрагмент сжатых данных в Python, чтобы воспроизвести исходный сжатый результат. Однако мне не удалось добиться соответствия с zlib, и я не уверен, какой метод или параметры сжатия использовались для исходных сжатых данных.
Вот код, который я использую:
import zlib
original_compress = '78010dc2390a80400c05d052b4d4ce4a3c8024933fdb719259c046c1c2f32bbc696ba098cd92b23242ed66625db568498d106d5e22e0202e4b622f082c24eba0577deeb3eee34bfe20fa7df036131b0000f53a00000000'
print('original_compress:', original_compress)
# Decompress the data
decompress = zlib.decompress(bytes.fromhex(original_compress))
print('decompress:', decompress.hex())
# Recompress the data
again_compress = zlib.compress(decompress)
print('again_compress:', again_compress.hex())
# Compare the results
if original_compress == again_compress.hex():
print('Matched')
else:
print('NotMatched')
Проблема:
Распаковка работает нормально с zlib, поэтому я предполагаю, что это формат, совместимый с zlib.
Однако повторное сжатие не дает результата побайтовое совпадение с исходными данными.
Наблюдения:
Исходные сжатые данные начинаются с 78 01, что предполагает использование заголовка zlib (возможно, DEFLATE без сжатия).
Распакованные данные действительны, и я могу подтвердить целостность распаковки.
Вопросы:
Как я могу воспроизвести точный исходный сжатый результат? Существуют ли определенные параметры или флаги, которые мне нужно использовать с zlib?
Могут ли исходные данные использовать специальную или нестандартную реализацию сжатия? Если да, то как я могу это определить?
Существуют ли какие-либо инструменты или библиотеки (помимо zlib), которые могут помочь мне перепроектировать используемый формат сжатия?
import ctypes
# Load the compiled miniz DLL for Windows
miniz = ctypes.CDLL("C:/Users/neatbox/miniz/miniz.dll")
# Define function signatures for decompression and compression
miniz.mz_compress2.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_ulong), ctypes.c_void_p, ctypes.c_ulong, ctypes.c_int]
miniz.mz_compress2.restype = ctypes.c_int
miniz.mz_uncompress.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_ulong), ctypes.c_void_p, ctypes.c_ulong]
miniz.mz_uncompress.restype = ctypes.c_int
# Decompress using miniz
def decompress_miniz(data):
source = ctypes.create_string_buffer(data)
source_len = len(data)
dest_len = ctypes.c_ulong(source_len * 4) # Allocate more space for decompressed data
dest = ctypes.create_string_buffer(dest_len.value)
result = miniz.mz_uncompress(dest, ctypes.byref(dest_len), source, source_len)
if result != 0:
raise RuntimeError("Decompression failed")
return dest.raw[:dest_len.value]
# Compress using miniz with the default compression level
def compress_miniz(data, level=1):
source = ctypes.create_string_buffer(data)
source_len = len(data)
dest_len = ctypes.c_ulong(source_len * 2) # Allocate more space for compressed data
dest = ctypes.create_string_buffer(dest_len.value)
result = miniz.mz_compress2(dest, ctypes.byref(dest_len), source, source_len, level)
if result != 0:
raise RuntimeError("Compression failed")
return dest.raw[:dest_len.value]
# Original compressed data
original_compress = bytes.fromhex(
'78010dc2390a80400c05d052b4d4ce4a3c8024933fdb719259c046c1c2f32bbc696ba098cd92b23242ed66625db568498d106d5e22e0202e4b622f082c24eba0577deeb3eee34bfe20fa7df036131b0000f53a00000000'
)
print(f"Original Compressed Data (hex): {original_compress.hex()}")
print(f"Original Compressed Length: {len(original_compress)} bytes")
# Step 1: Decompress
try:
decompressed = decompress_miniz(original_compress)
print(f"Decompressed Data (hex): {decompressed.hex()}")
print(f"Decompressed Length: {len(decompressed)} bytes")
except RuntimeError as e:
print(f"Decompression failed: {e}")
exit()
# Step 2: Recompress
try:
#print(f"{compress_miniz(decompressed)} aaa")
recompressed = compress_miniz(decompressed)
print(f"Recompressed Data (hex): {recompressed.hex()}")
print(f"Recompressed Length: {len(recompressed)} bytes")
# Step 3: Check if recompressed matches the original
if recompressed == original_compress:
print("Matched")
else:
print("NotMatched")
except RuntimeError as e:
print(f"Compression failed: {e}")
Подробнее здесь: https://stackoverflow.com/questions/792 ... essed-data
Как сопоставить формат сжатия для конкретных сжатых данных? ⇐ Python
Программы на Python
-
Anonymous
1732943184
Anonymous
Я пытаюсь распаковать и повторно сжать определенный фрагмент сжатых данных в Python, чтобы воспроизвести исходный сжатый результат. Однако мне не удалось добиться соответствия с zlib, и я не уверен, какой метод или параметры сжатия использовались для исходных сжатых данных.
Вот код, который я использую:
import zlib
original_compress = '78010dc2390a80400c05d052b4d4ce4a3c8024933fdb719259c046c1c2f32bbc696ba098cd92b23242ed66625db568498d106d5e22e0202e4b622f082c24eba0577deeb3eee34bfe20fa7df036131b0000f53a00000000'
print('original_compress:', original_compress)
# Decompress the data
decompress = zlib.decompress(bytes.fromhex(original_compress))
print('decompress:', decompress.hex())
# Recompress the data
again_compress = zlib.compress(decompress)
print('again_compress:', again_compress.hex())
# Compare the results
if original_compress == again_compress.hex():
print('Matched')
else:
print('NotMatched')
Проблема:
Распаковка работает нормально с zlib, поэтому я предполагаю, что это формат, совместимый с zlib.
Однако повторное сжатие не дает результата побайтовое совпадение с исходными данными.
Наблюдения:
Исходные сжатые данные начинаются с 78 01, что предполагает использование заголовка zlib (возможно, DEFLATE без сжатия).
Распакованные данные действительны, и я могу подтвердить целостность распаковки.
Вопросы:
Как я могу воспроизвести точный исходный сжатый результат? Существуют ли определенные параметры или флаги, которые мне нужно использовать с zlib?
Могут ли исходные данные использовать специальную или нестандартную реализацию сжатия? Если да, то как я могу это определить?
Существуют ли какие-либо инструменты или библиотеки (помимо zlib), которые могут помочь мне перепроектировать используемый формат сжатия?
import ctypes
# Load the compiled miniz DLL for Windows
miniz = ctypes.CDLL("C:/Users/neatbox/miniz/miniz.dll")
# Define function signatures for decompression and compression
miniz.mz_compress2.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_ulong), ctypes.c_void_p, ctypes.c_ulong, ctypes.c_int]
miniz.mz_compress2.restype = ctypes.c_int
miniz.mz_uncompress.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_ulong), ctypes.c_void_p, ctypes.c_ulong]
miniz.mz_uncompress.restype = ctypes.c_int
# Decompress using miniz
def decompress_miniz(data):
source = ctypes.create_string_buffer(data)
source_len = len(data)
dest_len = ctypes.c_ulong(source_len * 4) # Allocate more space for decompressed data
dest = ctypes.create_string_buffer(dest_len.value)
result = miniz.mz_uncompress(dest, ctypes.byref(dest_len), source, source_len)
if result != 0:
raise RuntimeError("Decompression failed")
return dest.raw[:dest_len.value]
# Compress using miniz with the default compression level
def compress_miniz(data, level=1):
source = ctypes.create_string_buffer(data)
source_len = len(data)
dest_len = ctypes.c_ulong(source_len * 2) # Allocate more space for compressed data
dest = ctypes.create_string_buffer(dest_len.value)
result = miniz.mz_compress2(dest, ctypes.byref(dest_len), source, source_len, level)
if result != 0:
raise RuntimeError("Compression failed")
return dest.raw[:dest_len.value]
# Original compressed data
original_compress = bytes.fromhex(
'78010dc2390a80400c05d052b4d4ce4a3c8024933fdb719259c046c1c2f32bbc696ba098cd92b23242ed66625db568498d106d5e22e0202e4b622f082c24eba0577deeb3eee34bfe20fa7df036131b0000f53a00000000'
)
print(f"Original Compressed Data (hex): {original_compress.hex()}")
print(f"Original Compressed Length: {len(original_compress)} bytes")
# Step 1: Decompress
try:
decompressed = decompress_miniz(original_compress)
print(f"Decompressed Data (hex): {decompressed.hex()}")
print(f"Decompressed Length: {len(decompressed)} bytes")
except RuntimeError as e:
print(f"Decompression failed: {e}")
exit()
# Step 2: Recompress
try:
#print(f"{compress_miniz(decompressed)} aaa")
recompressed = compress_miniz(decompressed)
print(f"Recompressed Data (hex): {recompressed.hex()}")
print(f"Recompressed Length: {len(recompressed)} bytes")
# Step 3: Check if recompressed matches the original
if recompressed == original_compress:
print("Matched")
else:
print("NotMatched")
except RuntimeError as e:
print(f"Compression failed: {e}")
Подробнее здесь: [url]https://stackoverflow.com/questions/79235456/how-to-match-compression-format-for-specific-compressed-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия