加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我应该使用System.Security.Cryptography命名空间中的哪些

发布时间:2020-12-15 22:49:22 所属栏目:百科 来源:网络整理
导读:The System.Security.Cryptography namespace至少有3种看似可互换的方式来获取将执行AES加密/解密的对象: using (var aes = Aes.Create()) 要么 using (var aes = new AesCryptoServiceProvider()) 要么 using (var aes = new AesCng()) 前两个是在.NET fra
The System.Security.Cryptography namespace至少有3种看似可互换的方式来获取将执行AES加密/解密的对象:

using (var aes = Aes.Create())

要么

using (var aes = new AesCryptoServiceProvider())

要么

using (var aes = new AesCng())

前两个是在.NET framework 3.5版中引入的.第三是更新;它是在4.6.2版本中引入的.因此人们可能怀疑它比其他2更好,但the documentation并没有说任何地方建议用它代替其他的.

前两个都有一个代码示例.两个样本看起来基本相同.

我应该使用哪一个,为什么?

解决方法

Aes是一个抽象类.我假设Aes.Create返回系统默认值.这可能是你想要使用的.让系统决定哪些是可用的以及哪些是最好的.

其他是实现类.

> AesCryptoServiceProvider使用旧的加密API MS CAPI;
> AesCng使用Windows Vista中引入的加密新一代API;
> AesManaged在.NET中实现AES(在您的帖子中没有提到).

您还可以使用Aes.Create(string)来选择其中一个实现.如果可能的话,我会尽量避免直接使用实现类.

如果您知道明确需要使用特定类,或者实际上,如果抽象Aes类不可用,则仅使用实现类.

请注意,Microsoft在类型系统中公开加密实现具有明显的缺点;选择特定提供商可能更难,基于密钥的实现选择可能更难(硬件加密),并且最终用户可能被欺骗写入不兼容或低效的代码.

Java中的CipherSpi实现类,例如隐藏在视野之外;这些是从通用Cipher类调用的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读