使用Botan从私钥中提取公钥

时间:2019-08-06 06:55:16

标签: c++11 network-programming botan

我正在尝试使用非对称私钥对邮件进行加密。 在Botan中,使用Load_key()函数,我读取了私钥并想从中提取它的公钥。为了在其构造函数中构造RSA公钥,我需要一个“算法标识符”对象和一个“密钥位”。使用pcks8_algorithm_identifier()函数的算法标识符对象。

问题是“密钥位”返回了secure_vector<unsigned char>而不是vector<unsigned char>,当我想将其传递给RSA_PublicKey构造函数时遇到了bad::alloc exception

有人遇到这样的问题吗?如果存在通过从Botan中的输入文件中加载密钥来进行非对称加密的另一种方法,我会感激

1 个答案:

答案 0 :(得分:1)

Botan使用两个接口来表示非对称密钥对:Public_KeyPrivate_KeyPrivate_Key接口继承自Public_Key。因此,当您获得通过RSA_PrivateKey的{​​{1}},该对象已经代表了公钥和私钥。也就是说,您可以将此对象插入需要PKCS8::load_key的其他方法中。

为了访问原始密钥位,Public_Key接口定义了一个Public_Keystd::vector<uint8_t> public_key_bits()界面还有一个附加的Private_Key。因此,每个secure_vector<uint8_t> private_key_bits()实例都应同时具有Private_Keypublic_key_bits可用。

参考:https://github.com/randombit/botan/blob/master/src/lib/pubkey/pk_keys.h

附加说明:private_key_bits类是带有特殊分配器的secure_vector类,可确保在销毁对象时覆盖基础内存,从而使诸如私钥位之类的敏感信息不会保留在内存中。如果实际上必须将std::vector转换为法向量,则可以使用便利功能secure_vectorhttps://github.com/randombit/botan/blob/master/src/lib/base/secmem.h)。