将数据压缩和加密为块

本文关键字:加密 数据 压缩 | 更新日期: 2023-09-27 18:24:29

我正在开发一个压缩和加密系统,我遇到了一个小障碍,我认为我可以通过与一些专业人士仔细思考来克服它。

目标

我想要一个能够容纳多种类型文件的文件容器系统。我希望能够根据压缩/加密时定义的某些规则以及存储在文件头中的信息来压缩(LZF)和加密的每一个。我希望能够从这个容器中以流的形式检索文件。这意味着文件必须按块进行压缩/加密,才能按顺序读取。否则,我将不得不解密,然后立即将整个文件解压缩到内存中,我希望这个过程占用尽可能少的内存。

当前状态

我已经完成了包含容器本身、文件表和所有文件信息的头系统。我目前正在编写文件流,以创建实际的容器。

问题

在经历这个过程的过程中,我一直试图弄清楚如何将文件的数据压缩到字节数组中,然后按块加密。我想我已经确定了1024字节的块,这意味着这将是64个AES加密的数据块,由于AES在128位块中加密,因此将存储这些数据块。整个系统将使用流进行设置。这意味着我无法控制将有多少数据发送到我的系统。我的问题是,在压缩数据时,我完全不知道我压缩的数据会有多大。我可以比原始大小更小、相同大小,甚至更大。我需要能够知道如何在块中成功地解压缩数据。

问题示例

假设我有一个128字节的信息块,我想要加密、压缩并保存到我所描述的系统中。我会把它写到流中,流反过来会压缩它。也可以说,128字节的块被压缩到64字节的块。然后我发送另一个长度为256的块,它被压缩到128字节。这两个块都被复制到缓冲器中,然后新的384字节缓冲器将被发送以进行加密,这将产生(24)16字节块。然后,它将以1024字节的块写入容器系统。

在这个例子中,我解密信息没有问题,因为它们是块的,但我不能对解压缩步骤说同样的话。根据我对压缩的理解,如果我试图解密压缩的64字节和128字节的块,我会得到无效的数据,因为它们最初是单独压缩的。如果这需要更多的澄清,请告诉我。

将数据压缩和加密为块

当您从流中读取数据时,您将获得一个字节计数。只有在最后一个块上,它才会小于块大小。这是调用WriteFinalBlock并让加密器进行填充的信号。