【发布时间】: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 服务可能显示为操作系统提供商或托管提供商,无论供应商提供什么。他们是不同的提供者。如果你想兼容。 不要直接引用它们。在配置中指定它们