CryptQueryObject 的 CNG 替换

Posted

技术标签:

【中文标题】CryptQueryObject 的 CNG 替换【英文标题】:CNG replacement for CryptQueryObject 【发布时间】:2018-06-20 06:59:47 【问题描述】:

我有兴趣尝试从数字签名中读取字段。我有调用 CryptQueryObject 的代码,然后是 CryptMsgGetParam 来获取一些字段,最后是 CertFindCertificateInStore 来加载证书。

关于如何使用 Cryptography Next Generation APIs 的任何提示?微软告诉我 CryptQueryObject 已被弃用,但没有指出它的替代品。

【问题讨论】:

嘿,你有没有为此找到解决方案? 我们在 C# 中找到了一个可以完成这项工作的解决方案。检查c-sharp-implementation-to-get-signedcms-from-signed-file 不;仍在使用已弃用的 API。 【参考方案1】:

CryptDecodeObject[Ex] 未标记为已弃用。只是说说而已。

您可以通过在具有不同对象类型的循环中调用 CryptDecodeObjectEx 来模拟检测 blob 类型的逻辑,以查看哪个不会出错。

也就是说,如果您使用CryptQueryObject 解析一个文件/数据块(而不是检测其类型),并且您很清楚那是什么,看看是否有主题在https://docs.microsoft.com/en-us/windows/win32/seccrypto/constants-for-cryptencodeobject-and-cryptdecodeobject下为您的数据块键入常量

一般来说,处理 ASN.1 数据结构(证书、CSR、CRL 等)的 CryptoAPI 函数已被弃用,并且在 CNG API 中没有对应物。也许这个被错误地标记为已弃用。

【讨论】:

以上是关于CryptQueryObject 的 CNG 替换的主要内容,如果未能解决你的问题,请参考以下文章

CryptBinaryToString/CryptStringToBinary 的 CNG 替代品?

使用 KSP/CNG 登录 java

随机数和 Microsoft CNG

scss CNG橙色按钮

ECDH 算法概述(CNG 示例)

ECDH 算法概述(CNG 示例)