对 gzip 压缩的原始文本进行加密:值更改为 base64

Issuse encrypting a gzip compressed raw text: value change to base64

我有以下原始文本:

.

它代表一个gz压缩值。这是未压缩的原始文本:

.

现在我想使用 CBC 模式的 AES 和 128 位长的密钥对其进行加密。这是我使用的密钥和初始化向量:

key:  asdfgh0123456789
iv:   0123456789asdfgh

无论如何,当我尝试解密从加密中获得的密文时,我得到了 base64 编码的原始文本作为我的输入。

[这里][1]是我用来加解密的网站服务。

为什么我的输入会自动更改为 base64?怎么了?

截图:

屏幕截图:[![在此处输入图片描述][2]][2]

字节序列的问题在于它们不能简单地显示在屏幕上,因为单个字节可以有 256 个不同的值,但字母表只有 26 个不同的字母。

给定一个字节序列,将其转换为 base64 后可以用字母和数字表示。

1) 文本 TEST 以字节表示为 54 45 53 54 和 base64 表示为 VEVTVA==

2) TEST 的 GZ 以字节表示为 1f 8b 08 00 00 00 00 00 00 ff 0b 71 0d 0e e1 e2 02 00 cf 1b f9 1e 06 00 00 00 和 base64 表示为 H4sIAAAAAAAA/wtxDQ7h4gIAzxv5HgYAAAA=

现在您可以加密 gz 的 bytes 或 gz 的 base64 - 它们是不同的。

当使用以文本作为输入的网页时,最好使用 gz 的 base64。然后,当你解密时,你会得到你使用的东西。

首先你必须明白你不是在加密原始文本 gzip。您实际上是在加密 base64 形式的原始文本 gizp

然后像 AES 这样的对称加密算法很有用,因为给定明文和密钥,它们允许加密和解密分别转换您的输入,首先是密文,然后是明文。

如您的屏幕截图所示,您已正确实现! 所以真的没有错。要return到原始gzip文本的原始形式,你只需要使用base64编码方案对解密输出进行解码你会得到你正在寻找的东西。

此外,正如您所知,并非所有字节值都可以用可见符号表示,这是经常使用 base64 表示加密文本或二进制数据的主要原因。与其他编码方案相比,它的开销更少。例如 hex 编码输入大小的两倍;而 base64 使它(平均)大 33%。

作为奖励:这里有用于此类转换的有用工具 Cyberchef