2011-12-07 85 views
2

我正在尝试在C++中使用WinCrypt APICryptoAPI/WinCrypt:如何用C++导入PEM文件中的私钥?

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

我有什么是公共和私有密钥中的文件以PEM格式:

和:

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

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

  • 的CreateFile & ReadFile的读取该文件内容
  • CryptStringToBinary,与CRYPT_STRING_BASE64HEADER从PEM格式转换为DER格式(删除从BASE64页眉和页脚和解码)
  • CryptDecodeObjectExX509_PUBLIC_KEY_INFO
  • CryptImportPublicKeyInfo,导入密钥

但现在,我的问题是这样做的蒙山私钥同样的事情。 任何帮助将真的非常感谢:) 谢谢。

+0

Crypto API是用于专有加密,使用它的PGP只是更为有用 – marinara

+0

是的,当然。但事实是我没有选择密钥的格式:否则我会选择CryptoAPI的专有格式。但是由于公钥导入可能来自PEM格式,所以我认为私钥也是可能的。 – nikloskoda

回答

7

一个PEM私钥可以PKCS_RSA_PRIVATE_KEY,然后调用CryptImportKey导入CAPI使用CryptDecodeObjectEx

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

我希望这会有所帮助。

+0

谢谢Mounir。你已经救了我从死路一条。 (我试图得到CRYPT_PRIVATE_KEY_INFO没有成功,我怀疑我需要它)。 –

+0

任何想法如何做与DSA密钥相同? –

相关问题