我需要使用 AES 加密数据。在研究时,我发现了AesCryptoServiceProvider类。
我对加密知之甚少,也不知道初始化向量 (IV) 是什么,所以我尝试在堆栈溢出中搜索 AES 示例,这导致我提出了这个问题。
为什么堆栈溢出链接使用 RijndaelManaged 类?RijndaelManaged和AesCryptoServiceProvider类是否在做同样的事情?
我需要使用 AES 加密数据。在研究时,我发现了AesCryptoServiceProvider类。
我对加密知之甚少,也不知道初始化向量 (IV) 是什么,所以我尝试在堆栈溢出中搜索 AES 示例,这导致我提出了这个问题。
为什么堆栈溢出链接使用 RijndaelManaged 类?RijndaelManaged和AesCryptoServiceProvider类是否在做同样的事情?
AES 基于 Rijndael,但块大小限制为 128 位。Rijndael 支持更广泛的块大小,许多加密库提供单独的 Rijndael 实现来补充 AES。
Rijndael 算法支持 128、160、192、224 和 256 位的块大小,但 AES 标准中仅指定了 128 位的块大小。[维基百科]
你链接到RijndaelManaged
班级。AES 的等效类是AesManaged
.
关于类之间的区别:AesManaged
只需将RijndaelManaged
块大小设置为 128即可使用。AesManaged
并且RijndaelManaged
不符合 FIPS,如果设置了 FIPS 组策略标志,则使用时将引发异常。.NET Framework 4.6.2(2016 年 8 月)添加了AesCng类,它是 AES 算法的CNG版本的实现。
IV是一段随机数据,长度与块大小相等,这是某些对称操作模式(例如,CBC 模式)所要求的。通常,IV 与第一个明文块或第一个密文块组合(异或)。这个想法是为了确保使用相同的密钥对相同的消息进行两次加密不会导致相同的输出。