【发布时间】:2012-10-24 21:21:06
【问题描述】:
我需要在项目中同时使用压缩和加密。项目中有两个程序。
在第一个程序中,一个 ascii 文本文件首先被压缩然后加密。对该文件的这个加密版本进行进一步的操作。然而,项目中的第二个程序遵循相反的过程,即首先解密然后解压缩以获得原始的 ascii 文本文件。
我已经实现了加密模块(aes via openssl)并且工作正常。但是当我在 linux 中寻找压缩选项时,我发现 gzip、zlib 等会抛出他们自己的文件版本,即 filename.gz 或其他扩展名,其内容不是纯粹的 ascii。 (例如,当我在终端中查看输出时,我看到菱形符号)正因为如此,我无法在我的 C 程序中完全读取压缩文件。
简而言之,我需要一个仅包含 ascii 字符的压缩文件。这有可能吗?
【问题讨论】:
-
您的加密算法不会发出纯 asci 字符(谢天谢地)。为什么对您的压缩机有这样的限制?你什么时候不能在 C 程序中读取 binary 文件了?
-
您可以使用base64 或类似编码对压缩输出进行后处理,但这会花费您 25% 的效率(它是 8 位编码中的 6 位)。解决程序无法读取二进制编码文件的问题可能会更好。
-
通过使用压缩文件的“仅ASCII”表示,您将取消压缩的大部分好处。仅 ASCII 表示将比二进制表示占用更多空间。要读取文件,请使用“二进制模式”(类 Unix 平台上的无操作,在 Windows 上至关重要)。并且不要对二进制数据使用字符串操作函数; 将数据中有空字节(压缩或加密或两者兼有)。
-
@fvu:33%? Base-64 增长了三分之一(每 3 in 需要 4 个字节)。
-
@JonathanLeffler 同样的事情,不同的视角 4/3 = 133% 用于 33% 开销,但 3/4 = 75% 和 1 - 75% = 25% 扩展......
标签: c encryption compression