如果我在RijndaelManaged中使用带有16字节数据的PKCS7填充,那么我得到32字节的数据输出。看来,对于PKCS7,当数据大小与块大小匹配时,它会添加一整个额外的数据块。
如果我使用零填充16位字节数据,我会得到16字节的数据。因此,对于零填充,如果数据与块大小匹配,则它不会填充。
我搜索了文档,并且没有说明填充行为的这种差异。
有人可以指点我某种文档,它指明当数据大小与块大小匹配时,不同填充模式的填充行为应该是什么。
答案 0 :(得分:6)
我遇到了this文章,其中提供的解释似乎与我在搜索过程中发现的其他文章相符。这是基本原因:
您可能想知道如果我们的数据长度是完美的,会发生什么 块大小的倍数。在这种情况下,PaddingMode.None和 PaddingMode.Zeros不添加填充。但是,在这种情况下 PaddingMode.PKCS7,必须添加填充,因为密码必须是 能够扭转甚至无填充的情况。在这种情况下,一个 必须将附加块添加到纯文本和每个的值 字节设置为块大小,以字节为单位。