CryptoAPI - 如何从私有中提取 RSA public 密钥

CryptoAPI - how to extract RSA public key from private

使用 windows CryptoAPI,是否可以从导入(未生成)的私钥中获取 public RSA 密钥?

如果我使用 CryptGenKey,我可以调用 CryptExportPublicKeyInfo 和 CryptImportPublicKeyInfo 来获取 public 密钥句柄。但是,当我尝试使用从 PEM 解码并使用导入的私钥执行相同操作时:

CryptImportKey(hCSP, pKeyBuf, cbKeyBuf, 0, CRYPT_EXPORTABLE, &hPrivKey)

私钥导入成功,我有一个有效的句柄,但随后对 CryptExportPublicKeyInfo 的调用失败并出现 "Key does not exist" 错误。看起来 CryptImportKey 和 CryptExportPublicKeyInfo 之间缺少另一个调用,但我找不到那个 API 调用。

exporting/importing public 密钥的问题是因为私钥是使用 AT_SIGNATURE 而不是 AT_EXCHANGE 生成的。见 explanation and the example code