结束“Managed”的类名是什么意思(C#.NET)?

时间:2011-05-01 13:10:47

标签: c# .net cryptography unmanaged managed

我对C#比较新,所以请耐心等待。我理解托管代码和非托管代码之间的基本区别。但是在使用某些方法时我仍然有点困惑。

例如,“托管”这个词在某些类名称结尾中是什么意思。这是否意味着他们是管理的而其他所有人都没有?例如, Aes AesManaged SHA512 SHA512Managed 之间有什么区别?我知道你不能从托管类中派生出来,但这就是我所知道的。

此外应该何时使用“托管”classess,例如何时选择 Aes 而非 AesManaged

(我已经阅读了维基百科上的托管代码基础知识(here),并且还找到了关于托管代码基础知识的一个很好的解释(here

感谢您的时间和答案。

4 个答案:

答案 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(以及MethodMethodManaged的任何其他组合)只是描述任何实现者必须满足的契约的基类,它本身没有功能

SHA512Managed的情况下,只有一个实现 - 托管实现。其他人可能会在CC++中使用实施。

答案 2 :(得分:3)

对于这些类,SHA512用于创建SHA512实现的工厂和用于实现的基类以及SHA512Managed都是用托管代码编写的一个这样的实现(想想C#)。我看了一下,这些库似乎也带有其他实现,包括使用本机Windows API的at least one

答案 3 :(得分:1)

许多加密类有两个版本;一个提供托管实现(完全用C#编写),而另一个使用操作系统的本机加密API用于相同的算法。