Распаковка зашифрованного файла в байтах

Мой заархивированный файл зашифрован, и мне нужно расшифровать и разархивировать файл.

Я не расшифровываю полный файл за раз, сохраняю на диске и распаковываю, поскольку это не оптимальный способ распаковки зашифрованного файла.

Я расшифровываю некоторые байты и хочу разархивировать только байт данных (буфер памяти), который я получил от расшифровщика, и разархивировать их.

используя minizip, мы не можем распаковать данные буфера из памяти. Могу ли я использовать Zlib Inflate()? будет ли это работать в этом случае?

Пожалуйста, ответьте, если есть другой способ сделать это с помощью minizip.


person user2758397    schedule 09.10.2013    source источник
comment
Почему это не оптимальный способ распаковки зашифрованного файла?   -  person fvdalcin    schedule 16.10.2013


Ответы (1)


Если вы говорите о распаковке zip-файла из буфера, хранящегося в памяти, который содержит содержимое zip-файла, то это, безусловно, то, что вы можете сделать с помощью minizip. Если вы посмотрите на minizip, у него есть IO API для загрузки zip файлы из памяти, чтобы их можно было разархивировать.

zlib_filefunc_def FileFunctions32 = {0};
ourmemory_t *FileMemory = {0};

// Fill out ourmemory_t instance with buffer pointer (base) and length (size)

fill_memory_filefunc(&FileFunctions32, FileMemory);
UnzipFileHandle = unzOpen2("__notused__", &FileFunctions32);

Есть несколько способов справиться с аспектом шифрования/дешифрования. Если процедура шифрования является частью спецификации zip, найдите библиотеку, которая может обрабатывать ее из коробки. Если шифрование выполняется для всего буфера zip-файла, вы можете просто расшифровать буфер на месте, прежде чем передать его функции unzOpen2 minizip. Другим вариантом может быть написание собственного уровня API ввода-вывода шифрования/дешифрования для minizip, если ни один из вышеперечисленных сценариев не является тем, что вы ищете.

person Nathan Moinvaziri    schedule 24.10.2013
comment
Этот ответ, похоже, не работает для последней версии minizip. ioapi_mem.c отсутствует, а fill_memory_filefunc() принимает только один параметр. - person jimvonmoon; 02.05.2019
comment
Взгляните на вики или test_stream_mem в test.c. - person Nathan Moinvaziri; 06.07.2019