1

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

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

有没有人遇到这样的问题?如果通过从 Botan 中的输入文件加载密钥有另一种非对称加密方式,我将不胜感激

4

1 回答 1

4

Botan 使用两个接口来表示非对称密钥对:Public_KeyPrivate_Key. Private_Key接口继承自Public_Key. 因此,当您获得例如RSA_PrivateKeyvia时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并且private_key_bits可用。

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

附加说明:secure_vector该类std::vector具有特殊的分配器,可确保在对象被破坏时覆盖底层内存,以便私钥位等敏感信息不会保留在内存中。如果您实际上必须将 a 转换secure_vector为法线向量,Botan::unlock则可以使用便利功能(https://github.com/randombit/botan/blob/master/src/lib/base/secmem.h)。

于 2019-08-06T08:28:49.630 回答