我对C#比较新,所以请耐心等待。我理解托管代码和非托管代码之间的基本区别。但是在使用某些方法时我仍然有点困惑。
例如,“托管”这个词在某些类名称结尾中是什么意思。这是否意味着他们是管理的而其他所有人都没有?例如, Aes 和 AesManaged 或 SHA512 和 SHA512Managed 之间有什么区别?我知道你不能从托管类中派生出来,但这就是我所知道的。
此外应该何时使用“托管”classess,例如何时选择 Aes 而非 AesManaged ?
(我已经阅读了维基百科上的托管代码基础知识(here),并且还找到了关于托管代码基础知识的一个很好的解释(here)
感谢您的时间和答案。
答案 0 :(得分:17)
.NET中有两种加密包装器,名称以Managed结尾的类和名称以CryptoServiceProvider结尾的类。只有CryptoServiceProvider版本通过了FIPS 140-1认证。它们是Microsoft提交给美国商务部的本机代码的包装,验证算法是否符合this document中概述的安全要求。它们还要求操作系统安装这些本机库。只要您与美国政府机构或任何规定您的代码必须通过FIPS认证的实体签订合同,FIPS合规就是一件大事。
算法的托管版本使用托管代码编写,并且不依赖于本机加密API库。他们未经 FIPS认证。您的客户可以使用一种注册表设置来强制执行FIPS合规性。 Managed类在打开时会在构造函数中抛出异常。有关详情,请参阅此blog post。
答案 1 :(得分:6)
查看Remarks
部分:
这是一个抽象类。这个类的唯一实现是SHA512Managed。
含义,SHA512
(以及Method
和MethodManaged
的任何其他组合)只是描述任何实现者必须满足的契约的基类,它本身没有功能
在SHA512Managed
的情况下,只有一个实现 - 托管实现。其他人可能会在C
或C++
中使用实施。
答案 2 :(得分:3)
对于这些类,SHA512
用于创建SHA512实现的工厂和用于实现的基类以及SHA512Managed
都是用托管代码编写的一个这样的实现(想想C#)。我看了一下,这些库似乎也带有其他实现,包括使用本机Windows API的at least one。
答案 3 :(得分:1)
许多加密类有两个版本;一个提供托管实现(完全用C#编写),而另一个使用操作系统的本机加密API用于相同的算法。