CryptoAPI / WinCrypt:如何在C ++中导入PEM文件中的私钥?

我试图在C ++中使用WinCrypt API 。

我的应用程序需要encryption,解密,签名和validation文件,而且我知道如何做到这一点,一旦我有正确的密钥。 但我的问题实际上是不是生成这些键的应用程序。

我拥有的是PEM格式文件中的公钥和私钥:

-----BEGIN RSA PRIVATE KEY----- [Base64 encoded] -----END RSA PRIVATE KEY----- 

和:

 -----BEGIN RSA PUBLIC KEY----- [Base64 encoded] -----END RSA PUBLIC KEY----- 

经过一番研究,我发现如何导入公钥: 这里和这里 ,使用以下方法:

  • CreateFileReadFile来读取文件内容
  • CryptStringToBinary ,使用CRYPT_STRING_BASE64HEADER将PEM格式转换为DER格式(从base64中删除页眉和页脚并解码)
  • CryptDecodeObjectExX509_PUBLIC_KEY_INFO
  • CryptImportPublicKeyInfo来导入密钥

但现在,我的问题是做私人密钥相同的事情。 任何帮助将真的非常感激:)谢谢。

通过使用带有PKCS_RSA_PRIVATE_KEY的 CryptDecodeObjectEx ,然后调用CryptImportKey,可以将PEM私钥导入到CAPI中。

我写了一个示例,演示如何使用PEM编码的RSA私钥来使用CAPI签名数据。 这是一个链接: http : //www.idrix.fr/Root/Samples/capi_pem.cpp

我希望这将有所帮助。