预计算AES输出长度

时间:2014-03-05 19:21:22

标签: c# encryption aes rijndael

我正在构建一个通过TCP运行的文件传输协议。我在发送之前加密数据。在实际加密之前是否可以计算密文的大小?

我想将文件大小发送到客户端,以便他知道数据流何时结束,同时在输出时将密文推送到流中。

加密我使用的是RijndaelManaged .NET类。

例如,大小为634字节的文件正在加密到660字节。

使用我找到的公式,块大小为16:

(inputSize / blockSize + 1)* blockSize

我得到650字节。为什么会出现差异?

输入 - 输出大小对的示例(以字节为单位):

输入: 905296 输出: 905332

输入: 82320 输出: 82356

输入: 308 输出: 340

1 个答案:

答案 0 :(得分:1)

您找到的公式并不完全正确 考虑到ECB或CBC(本课程中唯一的选择):
计算(Bytecount / Blocksize)和省略小数部分
然后为填充添加1,然后与Blocksize相乘。

634/16 = 39.625 => 40个
40 * 16 = 640

其他10个字节......可能是标题或类似的东西。
众所周知,MS无处不在。