1

我需要在项目中同时使用压缩和加密。项目中有两个程序。

在第一个程序中,一个 ascii 文本文件首先被压缩然后加密。对该文件的这个加密版本进行进一步的操作。然而,项目中的第二个程序遵循相反的过程,即首先解密然后解压缩以获得原始的 ascii 文本文件。

我已经实现了加密模块(aes via openssl)并且工作正常。但是当我在 linux 中寻找压缩选项时,我发现 gzip、zlib 等会抛出他们自己的文件版本,即 filename.gz 或其他扩展名,其内容不是纯粹的 ascii。(例如,当我在终端中查看输出时,我看到菱形符号)正因为如此,我无法在我的 C 程序中完全读取压缩文件。

简而言之,我需要一个仅包含 ascii 字符的压缩文件。这有可能吗?

4

2 回答 2

2

终于解决了这个问题。该程序正在正确处理所有内容。

在发送方:

compression: gzip -c secret.txt -9 > compressed.txt.gz
encryption: openssl enc -aes-256-cbc -a -salt -in compressed.txt.gz -out encrypted.txt

压缩输出 (gz) 作为输出文本文件的加密输入。结果输出纯粹是ASCII。

在接收方:

decryption: openssl enc -d -aes-256-cbc -a -in decryptme.txt -out decrypted.txt.gz
decompression: gunzip -c decrypted.txt.gz > message.txt
于 2012-10-24T13:21:06.457 回答
0

您可以在压缩和加密之间添加 uuencode / uudecode 过滤器 - 或者您可能希望放松压缩数据的限制为 ascii 形式:选项:

  • 从您的 c 程序中读取二进制数据。(例如 char buffer[256]; c=fread(buffer,1,256,stdin);
  • 将数据转换为十六进制格式
    static char encrypted_file[]={ 0x01,0x6e, ... };
于 2012-10-23T14:40:01.543 回答