如何使用WinCrypt和C++导入PEM格式的私钥?

nik*_*oda 4 c++ windows cryptography cryptoapi pem

我正在尝试在C++中使用WinCrypt API.

我的应用程序需要密码,解密,签名和验证文件,一旦我有正确的密钥,我知道如何做到这一点.但我的问题实际上是,这与生成这些密钥的应用程序不同.

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

-----BEGIN RSA PRIVATE KEY-----
[Base64 encoded]
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

而且:

-----BEGIN RSA PUBLIC KEY-----
[Base64 encoded]
-----END RSA PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

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

  • CreateFile&ReadFile读取文件内容
  • CryptStringToBinary,使用CRYPT_STRING_BASE64HEADER将PEM格式转换为DER格式(从base64删除页眉和页脚并解码)
  • CryptDecodeObjectEx with X509_PUBLIC_KEY_INFO
  • CryptImportPublicKeyInfo,用于导入密钥

但现在,我的问题是用私钥做同样的事情.任何帮助真的很感激:)谢谢.

小智 8

可以使用CryptDecodeObjectExPKCS_RSA_PRIVATE_KEY将PEM私钥导入CAPI ,然后调用CryptImportKey.

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

我希望这将有所帮助.