如何预先确定加密操作中生成的密文的长度?

Lee*_*e D 2 security cryptography rijndaelmanaged

我有一个应用程序,它以加密状态存储一些信息,包括文件和数据库.如何根据纯文本输入计算得到的密文的长度?

加密操作包括使用.NET RijndaelManaged类/算法,然后在存储之前转换为Base64字符串.

我希望能够做的是事先知道加密字符串对于给定输入的长度,以便我可以相应于其加密形式的可用存储空间相应地限制输入的长度(如果这是有意义的话) !).

谢谢

Ale*_*lli 6

Rijndael的输出与输入的大小相同,向上舍入到块大小的下一个最接近的倍数(通常为128位,也就是16个字节).Base64将其输入扩展到其输出4/3 - 它需要4个字节的输出来表示每个3字节的输入.

因此,如果您有一个70字节的输入,加密步骤将产生80字节的输出(16的最接近的倍数> 70),Base64将其转换为108(81/3乘以4).

  • 如果您正在使用PKCS7Padding(您可能正在使用),则加密步骤将扩展最接近_strictly_larger_倍的长度.例如,64个字节将变为80个字节.你可能知道这一点,但在你的例子中,你写的是"(16的最接近的倍数> = 70)"而不是"(16的最接近的倍数> 70)". (2认同)