You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PEM格式公钥转换为CNG密钥Blob?

可用原生API实现,无需自行实现ASN.1解析

你当前手动构造BCRYPT_ECCKEY_BLOB的方案仅适用于prime256v1(P-256)曲线的公钥,如果后续需要支持P-384、P-521等其他曲线,就需要修改硬编码的Magic值和密钥长度。Windows 8 及更高版本已经提供了完整的接口链路,可以直接从PEM格式公钥得到通用的BCRYPT_KEY_HANDLE,具体步骤如下:

  1. 解码PEM公钥得到DER二进制数据
    你当前使用的CryptStringToBinaryA可以继续使用,优化点是可以传入CRYPT_STRING_BASE64HEADER作为解码类型,API会自动识别并跳过-----BEGIN PUBLIC KEY-----/-----END PUBLIC KEY-----头尾标识,不需要手动处理字符串,兼容性更强。
  2. 解码DER数据得到公钥信息结构
    调用CryptDecodeObjectEx,指定结构类型为X509_PUBLIC_KEY_INFO,即可将第一步得到的DER数据解码为CERT_PUBLIC_KEY_INFO结构体,不需要手动解析ASN.1的字段偏移。
  3. 直接导入得到CNG密钥句柄
    调用CryptImportPublicKeyInfoEx2,传入上一步得到的CERT_PUBLIC_KEY_INFO指针,即可直接输出BCRYPT_KEY_HANDLE,完全不需要手动构造BCRYPT_ECCKEY_BLOB结构,也不需要硬编码曲线对应的dwMagic值,支持所有标准ECC曲线和RSA公钥的通用场景。

如果需要兼容Windows 7系统,可使用替代方案:

  • 先调用CryptImportPublicKeyInfo将CERT_PUBLIC_KEY_INFO导入为旧版CryptoAPI的密钥句柄
  • 再调用NCryptExportKey导出为CNG标准密钥Blob
  • 最后调用BCryptImportKeyPair导入得到BCRYPT_KEY_HANDLE

内容的提问来源于stack exchange,提问作者IInspectable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 06:12:01