RijndaelManaged vs AesCryptoServiceProvider(AES加密)

Ton*_*Nam 22 .net c# encryption aes

我需要使用AES加密数据.在研究时我发现了AesCryptoServiceProvider类.

我对加密知之甚少,我不知道初始化向量(IV)是什么,所以我尝试在堆栈溢出中搜索AES示例,这引出了我的这个问题.

为什么堆栈溢出链接使用RijndaelManaged类?是RijndaelManaged的AesCryptoServiceProvider类做同样的事情?

Dun*_*nes 33

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与第一个明文块或第一个密文块组合(XOR-ed).我们的想法是确保使用相同的密钥加密相同的消息两次不会产生相同的输出.

  • @TonoNam AES使用128位**块**大小.使用128位块大小,您可以使用256位**密钥**. (5认同)
  • 关于"AesManaged",你关于差异的最后陈述是非常错误的.`AesManaged`只使用`RijndaelManaged`,块大小设置为128.`AesManaged`也不符合FIPS,如果设置了FIPS组策略标志,将抛出异常.目前在.NET中,不支持CNG版本的AES算法. (3认同)