我正在研究一个压缩和加密系统,我遇到了一个小障碍,我认为我可以通过与一些专业人士一起思考来克服它。
目标
我想要一个能够容纳多种类型文件的文件容器系统。我希望能够根据将在压缩/加密时定义的某些规则以及存储在文件头中的信息来压缩(LZF)和加密(AES) 。我希望能够从这个容器中检索文件作为流。这意味着必须以块的形式压缩/加密文件才能按顺序读取它们。否则,我将不得不解密然后将整个文件一次解压缩到内存中,我希望这个过程尽可能少地占用内存。
当前状态
我已经完成了包含有关容器本身、文件表和所有文件信息的信息的标头系统。我目前正在处理文件写入流以创建实际的容器。
问题
在经历这个过程时,我一直试图弄清楚如何将文件的数据压缩成字节数组,然后将其加密成块。我想我已经确定了 1024 字节块,这意味着将存储 64 个 AES 加密数据块,因为 AES 以 128 位块加密。整个系统将使用流设置。这意味着我无法控制将多少数据发送到我的系统。我的问题是压缩数据时,我完全不知道我要压缩的数据有多大。我可以比原来的尺寸更小、相同甚至更大。我需要能够知道如何以块的形式成功解压缩数据。
问题示例
假设我有一个 128 字节的信息块,我想要加密、压缩并保存到我描述的这个系统中。我会把它写到流中,然后再压缩它。还可以说 128 字节块被压缩为 64 字节块。然后我发送另一个长度为 256 的块,它被压缩到 128 字节。这两个块都被复制到缓冲区中,然后将发送新的 384 字节缓冲区进行加密,这将产生 (24) 个 16 字节块。然后它将以 1024 字节块的形式写入容器系统。
在此示例中,我可以轻松解密信息,因为它们是块中的,但对于解压缩步骤,我不能说同样的话。根据我对压缩的理解,如果我尝试解密压缩的 64 和 128 字节块,我将得到无效数据,因为它们最初是单独压缩的。如果这需要更多澄清,请告诉我。