【问题标题】:Why are CNG requirements in .NET lower than in unmanaged CNG?为什么 .NET 中的 CNG 要求低于非托管 CNG?
【发布时间】:2018-03-05 22:17:31
【问题描述】:

.NET 和非托管代码中对 CNG 的最低要求如此不一致是否有合理的原因?例如,

NCryptDeleteKey(非托管 CNG)需要 Windows Vista 或 Server 2008:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa376251(v=vs.85).aspx

但 CngKey.delete(显然是托管 CNG)只需要可从 Windows 7 访问的 .NET 3.5:

https://msdn.microsoft.com/en-us/library/system.security.cryptography.cngkey.delete(v=vs.110).aspx

根据调用的不同,某些要求与 4.6.2 一样陡峭,示例:

用于访问现有 AES CNG 密钥的 AesCng 构造函数:

https://msdn.microsoft.com/en-us/library/mt693435(v=vs.110).aspx

但是您仍然可以从正确更新的 Windows 7 机器上调用它。那么为什么会有这样的差异呢?

正确更新的 Windows 7 机器是否可以可靠地调用 NCryptDeleteKey?

【问题讨论】:

  • 它们不不一致。他们是不同的提供者。非托管的由操作系统提供。如果操作系统没有它们,它就无法提供它们。另一方面,最早支持的 .NET 版本是 4.5.2。最早支持的 Windows 版本是服务器的 2012,如果不是更高版本的话。您可以假设所有提供商都可用
  • 顺便说一句,您不应该直接致电提供商。它们都实现了相同的接口,这意味着您可以在创建它们时按名称指定它们,甚至可以通过配置来指定它们。
  • 我的组织希望最大限度地利用遗留支持。我必须有充分的理由不支持完全升级的 Windows 7,这就是我问这个问题的原因。所以...如果我理解正确,.NET 框架添加了操作系统级别不可用的功能?这有什么区别?
  • @TimothyJohnLaird 完全正确。
  • @TimothyJohnLaird 是的和 nonono。 “非托管”提供商可能是您安全笔记本电脑的智能卡提供商。这是操作系统提供的。操作系统中较新的提供程序为 SSE2 命令提供了更好的支持。云提供的 KMS 服务可能显示为操作系统提供商或托管提供商,无论供应商提供什么。他们是不同的提供者。如果你想兼容。 不要直接引用它们。在配置中指定它们

标签: c# .net cng


【解决方案1】:

托管意味着它们在 .NET Framework 中实现。非托管意味着它们必须由操作系统提供,并且随着时间的推移,Microsoft 一直在改进 Windows 附带的内容。

【讨论】:

  • 优秀。那么我从 c++ 中编码 CNG 中获得了什么?如果我的大部分代码都是用 c# 编写的,那么是否有充分的理由使用非托管 C++ CNG?
  • @TimothyJohnLaird unmanaged 可能会有更好的性能。
  • @TimothyJohnLaird 使用 C++ 编码将一无所获。当您尝试不正确地将结果编组到您的应用程序时,您可能会支付额外的开销。 .NET 已经可以很好地与非托管提供程序一起使用。成本来自加密计算,而不是您如何将单个缓冲区传递给它们
  • @PanagiotisKanavos 嘿,您能否对SHA1Managed 之类的类和通过工厂方法SHA1.Create() 创建的实例有所了解?有什么区别?他们都使用CNG API吗?如果不是 - 不受管理的 - 它是通过 COM 实现的,还是通过 P/Invoke 实现的?只是好奇,非常感谢您的阅读。
  • @SpiritBob 如果您想问什么,请发表问题。
猜你喜欢
  • 2013-09-11
  • 2018-06-20
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多