我需要使用AES加密数据。在研究过程中,我发现了AesCryptoServiceProvider类。
我对加密知之甚少,我也不知道初始化向量(IV)是什么,因此我尝试在堆栈溢出中搜索AES示例,这导致我进入this question。
为什么堆栈溢出链接使用RijndaelManaged类? RijndaelManaged和AesCryptoServiceProvider类是否做相同的事情?
最佳答案
AES基于Rijndael,但块大小限制为128位。 Rijndael支持更大范围的块大小,许多密码库提供了单独的Rijndael实现来补充AES。
您已链接到RijndaelManaged
类。 AES的等效类是 AesManaged
。
关于类之间的差异:AesManaged
仅使用块大小设置为128的RijndaelManaged
。AesManaged
和RijndaelManaged
不符合FIPS,如果使用FIPS组策略标志,则ojit_code和ojit_code会引发异常。 .NET Framework 4.6.2(2016年8月)添加了AesCng类,该类是AES算法的CNG版本的实现。
An IV是一段随机数据,长度等于块大小,某些对称操作模式(例如CBC模式)需要此数据。通常,IV与第一段明文或第一段密文组合(异或)。这样做的目的是确保用相同的 key 对相同的消息加密两次不会导致相同的输出。