AES (RijndaelManaged) 解密额外字符



因此,我正在使用RijndaelManaged类(.NET 2.0)对配置文件中的小字符串(大约十几个字符或更少)进行AES-128 CBC加密。我已经让一切正常工作,除了当我解密数据时,填充字节没有被删除。我知道我可以选择不做任何填充,但这非常不安全,需要添加填充字节,因为这就是 AES 的工作方式(在谨慎的块大小中)。现在我正在使用PaddingMode.ISO10126CryptoStream自动附加加密随机字节。

处理

此问题的行业标准方法是什么?在解密时摆脱这些"额外字节"的正确方法是什么?

摆脱填充的最佳方法当然是使用 PKCS#7 填充,并让密码实例摆脱填充,正如 GregS 所建议的那样。

如今,执行加密的最佳方法是改用CTR模式加密,或者最好是包含身份验证/完整性保护的密码,例如GCM。请注意,对于小字符串,您需要注意不要通过密文的大小泄露信息(对"yes"执行CTR模式加密的结果将导致三个字节,"no"将导致2个字节)。