我在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
发布于 2017-08-03 15:47:54
System.Security.Cryptography.Aes是一个抽象类,仅代表AES-性质的概念.AesManaged、AesCryptoServiceProvider和AesCng是AES在托管代码中的具体实现,分别使用Windows和Windows。(在.NET核心上,这是一个谎言: AesManaged和AesCryptoServiceProvider都使用一个自动隐藏类,该类使用Windows、macOS Security.framework或OpenSSL (视情况而定)
如果您不清楚您想要哪一个实例,您希望通过Aes.Create()创建一个实例,并且只使用基本类型。唯一真正的例外是使用带有命名密钥的AesCng (这是非常罕见的)。
发布于 2020-02-14 18:55:18
虽然我知道已经有了一个被接受的答案,我觉得这是一个很好的开始,但这让我想更多地理解为什么在.Net中有几个Aes实现似乎都在做同样的事情。所以,我决定再深入一点。
正如前面提到的,Aes类是一个抽象类,因此不能只调用“Create”静态方法来实现这个类。此静态方法基于CryptoConfig设置创建AES的实现,据我所知,这允许您在机器配置中指定特定的实现,否则默认情况下给出AesCryptoServiceProvider。
反过来,AesCryptoServiceProvider将为您提供本机加密应用程序编程接口(CAPI)句柄。
AesManaged使用一个关键信息来确定要给您的实现,这就是AllowOnlyFipsAlgorithms标志。根据文档,它“表明运行时是否应该强制执行仅创建联邦信息处理标准(FIPS)认证算法的策略”。如果这是真的,那么您将得到AesCryptoServiceProvider,否则是RijndaelManaged。
发布于 2017-08-03 02:44:43
AES是抽象基类,而AESManaged是一个基于Rijndael对称算法的托管实现,具有固定的块大小和迭代次数。
https://stackoverflow.com/questions/45473884
复制相似问题