首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aes和AesManaged有什么区别?

Aes和AesManaged有什么区别?
EN

Stack Overflow用户
提问于 2017-08-03 02:35:41
回答 3查看 10.7K关注 0票数 20

我在C#中发现了两个与AES相关的类,它们的示例代码是相似的,这两个类之间有什么区别?

Aes类

https://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.110).aspx

AesManaged类

https://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged(v=vs.110).aspx

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-03 15:47:54

System.Security.Cryptography.Aes是一个抽象类,仅代表AES-性质的概念.AesManagedAesCryptoServiceProviderAesCng是AES在托管代码中的具体实现,分别使用Windows和Windows。(在.NET核心上,这是一个谎言: AesManaged和AesCryptoServiceProvider都使用一个自动隐藏类,该类使用Windows、macOS Security.framework或OpenSSL (视情况而定)

如果您不清楚您想要哪一个实例,您希望通过Aes.Create()创建一个实例,并且只使用基本类型。唯一真正的例外是使用带有命名密钥的AesCng (这是非常罕见的)。

票数 22
EN

Stack Overflow用户

发布于 2020-02-14 18:55:18

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

正如前面提到的,Aes类是一个抽象类,因此不能只调用“Create”静态方法来实现这个类。此静态方法基于CryptoConfig设置创建AES的实现,据我所知,这允许您在机器配置中指定特定的实现,否则默认情况下给出AesCryptoServiceProvider

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

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

最后,在最初的文章中没有提到AesCng。据微软称,CNG是CAPI的“下一代”,即面向云使用场景

票数 14
EN

Stack Overflow用户

发布于 2017-08-03 02:44:43

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45473884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档