【问题标题】:Unzipping an encrypted File in bytes以字节为单位解压缩加密文件
【发布时间】:2013-10-17 03:33:05
【问题描述】:

我的压缩文件已加密,我需要解密并解压缩文件。

我不是一次解密完整文件并将其存储在磁盘中并解压缩,因为它不是解压缩加密文件的最佳方式。

我正在解密一些字节,并且只想解压缩从解密器接收到的数据字节(内存缓冲区)并解压缩它们。

使用 minizip 我们无法从内存中解压缩缓冲区数据。我可以使用 Zlib Inflate() 吗?在这种情况下会起作用吗?

如果有其他使用 minizip 的方法,请回复。

【问题讨论】:

  • 为什么不是“解压加密文件的最佳方式”?

标签: c++ c zip zlib unzip


【解决方案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 文件缓冲区进行了加密,那么您可以在将缓冲区传递给 minizip 的 unzOpen2 函数之前简单地解密缓冲区。如果上述场景都不是您想要的,另一种选择可能是为 minizip 编写您自己的加密/解密 IO API 层。

【讨论】:

  • 这个答案似乎不适用于最新版本的 minizip。 ioapi_mem.c 丢失,fill_memory_filefunc() 只接受一个参数。
  • 看看wikitest_stream_mem 中的test.c
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多