【发布时间】:2018-01-25 22:05:21
【问题描述】:
我正在尝试使用 AES 加密在 C# 中分块加密和解密文件。
目前,它以 1000 字节的块读取文件,对每个块进行加密,并以 {IV}{Chunk0}{Chunk1}{Chunk2}... 的格式写入文件(没有任何分隔符,也没有大括号)。
解密文件时,它会从文件中读取前 16 个字节,将其用作 AES IV,然后分块解密文件的其余部分。
我的问题是,我如何知道要解密的每个加密块的大小?加密时,每个块由 1000 字节的纯文本组成,但在加密时,这个 1000 的长度会发生变化。
我应该在每个块之间使用分隔符,例如逗号吗?或者我是否可以避免在块之间使用分隔字符,而是通过读取 x 字符块来解码? (如上所述,如果每个加密块都是 1000 字节的加密明文,我是否可以计算每个加密块的大小?)
【问题讨论】:
-
AES 是一种块密码,可处理 128 位 = 16 字节的块。 1000 不能被 16 整除 - 因此这是一个糟糕的选择。
-
澄清一下,我说的是要加密的 1000 字节明文。输出总是可以被 16 整除。每个块都使用
PKCS7填充。我知道使用 1000 可能是个坏主意;相反,我将使用 1024。但我的问题仍然存在。 -
这听起来类似于磁盘加密。您应该阅读专家如何进行磁盘加密,尤其是他们用于维护安全性的分组密码模式。
-
目前尚不清楚您要完成什么,因此以下内容可能不适合。更多信息会有所帮助。 1. 使用一个块大小是块大小的倍数。 2. 不要重新初始化加密,继续使用相同的实例。 3. padding 仅在 final 被调用时添加到 final 块中。
标签: c# encryption aes chunking