Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类名结尾是什么;管理的;平均值(C#NET)?_C#_.net_Cryptography_Unmanaged_Managed - Fatal编程技术网

类名结尾是什么;管理的;平均值(C#NET)?

类名结尾是什么;管理的;平均值(C#NET)?,c#,.net,cryptography,unmanaged,managed,C#,.net,Cryptography,Unmanaged,Managed,我对C#比较陌生,所以请容忍我。我理解托管代码和非托管代码之间的基本区别。但我仍然有点困惑,什么时候使用一些方法 例如,在某些类名结尾中,“Managed”一词是什么意思。这是否意味着他们得到了管理,而其他人则没有?例如,Aes与Aes管理或SHA512与SHA512管理之间的区别是什么?我知道不能从托管类派生,但我只知道这些 此外,何时应该使用“托管”类,例如何时选择Aes而不是Aes托管 (我已经在wikipedia()上阅读了托管代码的基础知识,还找到了一个关于托管代码基础知识的很好的解释

我对C#比较陌生,所以请容忍我。我理解托管代码和非托管代码之间的基本区别。但我仍然有点困惑,什么时候使用一些方法


例如,在某些类名结尾中,“Managed”一词是什么意思。这是否意味着他们得到了管理,而其他人则没有?例如,Aes与Aes管理或SHA512与SHA512管理之间的区别是什么?我知道不能从托管类派生,但我只知道这些

此外,何时应该使用“托管”类,例如何时选择Aes而不是Aes托管

(我已经在wikipedia()上阅读了托管代码的基础知识,还找到了一个关于托管代码基础知识的很好的解释()


感谢您的时间和回答。

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

请看
备注部分:

这是一个抽象类。该类的唯一实现是SHA512Managed

也就是说,
SHA512
(以及
Method
MethodManaged
的任何其他组合)只是一个基类,描述了任何实现者必须履行的契约,它本身没有功能


SHA512Managed
的情况下,只有一个实现—托管实现。可能还有其他实现使用
C
C++
中的实现。许多加密类有两个版本;一个提供托管实现(完全用C#编写),而另一个则使用操作系统的本机加密API来实现相同的算法。

在.NET中有两种加密包装器,名称以托管结尾的类和名称以CryptoServiceProvider结尾的类。只有CryptoServiceProvider版本经过FIPS 140-1认证。它们是围绕Microsoft提交给美国商务部,验证算法是否符合中概述的安全要求。它们还要求操作系统安装这些本机库。无论何时,只要您与美国政府机构或任何规定您的代码必须符合的实体签订合同,FIPS合规性都是一件大事我们不能通过FIPS认证


算法的托管版本是用托管代码编写的,不依赖于本机加密API库。它们未经FIPS认证。您的客户可以使用一个注册表设置来强制FIPS合规性。托管类在其构造函数中打开时将抛出异常。有关t.

“我知道你不能从托管类派生”——这是不正确的。你在名称中看到的带有“托管”的特定类可能碰巧被标记为
密封的
,因此它们不能派生,但这与它们被管理或具有“托管”无关以他们的名义。@Guffa感谢你为我澄清这一点。是的,我知道,但你可以写“Aes=Aes.Create();”或“AesManaged=AesManaged.Create();”。我似乎仍然看不出区别。你关心的是Aes类,它有你需要的方法。Aes.Create()返回Aes的一些具体实例,也许它会给你一个AESMANDERED实例,也许它会实例化另一个类-你不需要关心。AESMANDERED.Create()创建一个特定AESMANDERED类的istance,你不需要这样做(阅读工厂模式).NET 4中还有
SHA512Cng
SHA512CryptoServiceProvider
,后者符合FIPS。有趣的是,他们当时没有更改文档。我的信息来自
SHA512
@Ben@nos的.net4.0页面:实际上,这两个页面都调用了
Aes.Create
工厂方法。事实上,它是可用的e as
AesManaged.Create
也是一个工件,其原因是工厂也充当基类。事实上,缺少“Managed”后缀不能保证只使用FIPS认证的模块。确实使用了CryptoAPI模块,但并非所有版本都经过认证。如果只需要使用FIPS认证的模块,他需要检查模块版本(MSDN站点上的某个地方有认证模块及其版本的列表)。