使用 Botan 从私钥中提取 Public 密钥

Extracting Public key from Private key using Botan

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

问题是 "Key Bits",其中 returns 是 secure_vector<unsigned char> 而不是 vector<unsigned char>,当我想将它传递给时遇到了 bad::alloc exception RSA_PublicKey 构造函数。

有人遇到过这样的问题吗?如果有通过从 Botan 中的输入文件加载密钥来进行非对称加密的替代方法,我将不胜感激

Botan 使用两个接口来表示非对称密钥对:Public_KeyPrivate_KeyPrivate_Key 接口继承自 Public_Key。因此,当您获得例如RSA_PrivateKey 通过 PKCS8::load_key,这个对象已经代表了 public 和私钥。也就是说,您可以将此对象插入其他需要 Public_Key.

的方法中

为了访问原始密钥位,Public_Key 接口定义了一个 std::vector<uint8_t> public_key_bits()Private_Key 接口多了一个 secure_vector<uint8_t> private_key_bits()。因此,每个 Private_Key 实例都应该有 public_key_bitsprivate_key_bits 可用。

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

附加说明:secure_vector class 是一个带有特殊分配器的std::vector,确保在对象被销毁时底层内存被覆盖,以便私钥等敏感信息位不保留在内存中。如果您实际上必须将 secure_vector 转换为法向量,则可以使用便捷函数 Botan::unlock (https://github.com/randombit/botan/blob/master/src/lib/base/secmem.h).