2010-05-03 79 views
2

如果我在RijndaelManaged中用16个字节的数据使用PKCS7填充,则获得32个字节的数据输出。看起来,对于PKCS7,当数据大小与块大小相匹配时,它会添加一整块额外的数据。当数据匹配块大小时,RijndaelManaged填充

如果我使用零填充16字节的数据,我得到了16字节的数据。因此,如果数据与块大小匹配,那么对于零填充,则不填充。

我已经通过文档搜索,它没有说明填充行为的差异。

有人可以请我指出某种文档,它指定了当数据大小与块大小相匹配时,不同填充模式的填充行为应该是什么。

回答

6

我碰到过this这篇文章,它提供了一个解释,似乎与我在搜索过程中发现的其他文章混杂在一起。基本原因如下:

您可能想知道如果我们的数据长度是完美的 块大小的倍数会发生什么。在这种情况下,PaddingMode.None和 PaddingMode.Zeros不添加填充。但是,在 PaddingMode.PKCS7的情况下,必须添加填充因为密码必须是 即使是无填充情况也能够反转。在这种情况下,必须将 附加块添加到明文中,并将每个 字节的值设置为以字节为单位的块大小。