Botan加载现有RSA私钥

时间:2018-04-12 11:30:17

标签: c++ botan

我正在使用Botan C ++库来签署和验证一些license.ini文件。我已经设置了Botan PK_Signer来使用RSA算法来加密用PKCS v1.5创建的哈希。这是我的代码:

true

用于生成RSA_PrivateKey对象的标记行会引发异常:

  

在0x00007FF85D2BC3C7(vcruntime140.dll)中抛出异常   license_signer.exe:0xC0000005:访问冲突读取位置   0x0000021A8FA07000。

我以前从未使用过Botan库。如果有人知道为什么会发生这种情况或想法如何实现这一点,请协助。感谢。

2 个答案:

答案 0 :(得分:1)

进入您尝试使用的构造函数的

private_key数据必须是DER编码的。确保它是。但是,一般情况下,最好使用适当的loadKey方法。

答案 1 :(得分:0)

使用Botan 2.12.1

#include <string>
#include <botan/auto_rng.h>
#include <botan/auto_rng.h>
#include <botan/base64.h>
#include <botan/pkcs8.h>
#include <botan/rsa.h>
#include <botan/x509_key.h>
#include <botan/data_src.h>
#include <botan/pubkey.h>

//Assuming the private and public keys are in Base64 encoded BER.

Botan::AutoSeeded_RNG rng;
Botan::RSA_PrivateKey keyPair(rng, static_cast<size_t>(4096));
std::string privateKey = Botan::base64_encode(Botan::PKCS8::BER_encode(keyPair));
std::string publicKey = Botan::base64_encode(Botan::X509::BER_encode(keyPair));

//Loading the public key

Botan::SecureVector<uint8_t> keyBytes(Botan::base64_decode(publicKey));
std::unique_ptr<Botan::Public_Key> pbk(Botan::X509::load_key(std::vector(keyBytes.begin(), keyBytes.end())));

//Loading the private key

Botan::SecureVector<uint8_t> keyBytes(Botan::base64_decode(privateKey));
Botan::DataSource_Memory source(keyBytes);
std::unique_ptr<Botan::Private_Key> pvk(Botan::PKCS8::load_key(source));