C# Aes和Aes的区别是什么

C# Aes和Aes的区别是什么,c#,encryption,aes,C#,Encryption,Aes,我发现C#中有两个类与AES相关,MSDN提供的示例代码相似,这两个类之间有什么区别 Aes类 AES管理类 AES是抽象基类,而AES managed是基于Rijndael对称算法的AES的托管实现,具有固定的块大小和迭代计数 Aes是一个抽象类,仅代表Aes的概念AES托管、AES加密服务提供商和AesCng是AES在托管代码中的具体实现,分别使用Windows CAPI和Windows CNG。(在.NET Core上,这是一个谎言:AesManaged和AESCryptServiceP

我发现C#中有两个类与AES相关,MSDN提供的示例代码相似,这两个类之间有什么区别

Aes类

AES管理类


AES是抽象基类,而AES managed是基于Rijndael对称算法的AES的托管实现,具有固定的块大小和迭代计数

Aes是一个抽象类,仅代表Aes的概念<代码>AES托管、
AES加密服务提供商
AesCng
是AES在托管代码中的具体实现,分别使用Windows CAPI和Windows CNG。(在.NET Core上,这是一个谎言:AesManaged和AESCryptServiceProvider都只使用automagic隐藏类,该类使用Windows CNG、macOS Security.framework或OpenSSL(如可用)


如果不清楚要在哪一个上创建实例,则需要通过
Aes.create()
创建实例,并且只使用基类型。唯一真正的例外是使用带有命名密钥的AesCng时(这是非常罕见的)。

虽然我知道已经有了一个公认的答案,我觉得这是一个好的开始,但这让我想更多地理解为什么.Net中有几个Aes实现似乎都在做同样的事情。所以,我决定再深入一点

如前所述,是一个抽象类,因此不能只调用“Create”静态方法来创建该类的新实现。此静态方法基于CryptoConfig设置创建AES的实现,据我所知,它允许您在机器配置中指定特定的实现,否则默认情况下,它将为您提供

反过来,将为您提供本机加密应用程序编程接口(CAPI)句柄

AesManaged使用一条关键信息来确定要为您提供的实现,即。根据文档,它“表明运行时是否应强制执行仅创建联邦信息处理标准(FIPS)认证算法的策略”。如果这是真的,那么您将获得AesCryptoServiceProvider,否则RijndaelManaged

最后,原帖中没有提到的是。根据微软的说法,CNG是CAPI的“下一代”,也就是说