Ham*_*ite 8 .net c# cryptography aes
System.Security.Cryptography 命名空间至少有 3 种不同的看似可互换的方法来获取将执行 AES 加密/解密的对象:
using (var aes = Aes.Create())
Run Code Online (Sandbox Code Playgroud)
或者
using (var aes = new AesCryptoServiceProvider())
Run Code Online (Sandbox Code Playgroud)
或者
using (var aes = new AesCng())
Run Code Online (Sandbox Code Playgroud)
前两个是在 .NET 框架 3.5 版中引入的。第三个要新得多。它是在 4.6.2 版中引入的。因此,人们可能会怀疑它比其他两个更好,但文档没有说明建议使用它代替其他两个。
前两个各有一个代码示例。两个样品看起来基本相同。
我应该使用哪一种,为什么?
Aes是一个抽象类。我假设Aes.Create返回系统默认值。这可能是您想要使用的。让系统决定哪些可用,哪些最适合使用。
其他是实现类。
AesCryptoServiceProvider 使用 MS CAPI,旧的加密 API;AesCng 使用 Windows Vista 中引入的加密新一代 API;AesManaged 在 .NET 中实现 AES(您的帖子中未提及)。您还可以使用Aes.Create(string)选择其中一种实现。如果可能,我会尽量避免直接使用实现类。
如果您知道明确需要使用特定类,或者实际上抽象Aes类不可用,则仅使用实现类。
请注意,Microsoft 在类型系统中公开加密实现有明显的缺点;选择特定的提供者可能更难,基于密钥的实现选择可能更难(硬件加密),最终用户可能会被诱骗编写不兼容或效率低下的代码。
CipherSpi例如,Java 中的实现类在视图中是隐藏的;这些是从泛型Cipher类调用的。
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |