我正在尝试使用非对称私钥对邮件进行加密。
在Botan
中,使用Load_key()
函数,我读取了私钥并想从中提取它的公钥。为了在其构造函数中构造RSA公钥,我需要一个“算法标识符”对象和一个“密钥位”。使用pcks8_algorithm_identifier()
函数的算法标识符对象。
问题是“密钥位”返回了secure_vector<unsigned char>
而不是vector<unsigned char>
,当我想将其传递给RSA_PublicKey构造函数时遇到了bad::alloc exception
。
有人遇到这样的问题吗?如果存在通过从Botan中的输入文件中加载密钥来进行非对称加密的另一种方法,我会感激
答案 0 :(得分:1)
Botan使用两个接口来表示非对称密钥对:Public_Key
和Private_Key
。 Private_Key
接口继承自Public_Key
。因此,当您获得通过RSA_PrivateKey
的{{1}},该对象已经代表了公钥和私钥。也就是说,您可以将此对象插入需要PKCS8::load_key
的其他方法中。
为了访问原始密钥位,Public_Key
接口定义了一个Public_Key
。 std::vector<uint8_t> public_key_bits()
界面还有一个附加的Private_Key
。因此,每个secure_vector<uint8_t> private_key_bits()
实例都应同时具有Private_Key
和public_key_bits
可用。
参考:https://github.com/randombit/botan/blob/master/src/lib/pubkey/pk_keys.h
附加说明:private_key_bits
类是带有特殊分配器的secure_vector
类,可确保在销毁对象时覆盖基础内存,从而使诸如私钥位之类的敏感信息不会保留在内存中。如果实际上必须将std::vector
转换为法向量,则可以使用便利功能secure_vector
(https://github.com/randombit/botan/blob/master/src/lib/base/secmem.h)。