使用 Botan 时出现段错误
Seg fault when using Botan
我刚刚开始使用 Botan。我已将 botan_all.h
包含在我的代码文件中,并在构建时链接到 libbotan-2.a
库。
这里是main.cpp的相关部分:
#include "botan_all.h"
int main(int argc, char *argv[])
{
const std::vector<uint8_t> key = Botan::hex_decode("2B7E151628AED2A6ABF7158809CF4F3C");
std::unique_ptr<Botan::Cipher_Mode> enc = Botan::Cipher_Mode::create("AES-128/CBC/PKCS7", Botan::ENCRYPTION);
enc->set_key(key);
}
enc->set_key(key)
导致段错误。我错过了什么?
这可能是由于您的 Botan 版本没有在构建时支持指定的算法。如果未找到指定的算法 (reference),则方法 CipherMode::create
returns a nullptr
。然后您必须检查结果,例如:
if (enc == nullptr) {
throw std::runtime_error{"Cipher not supported!"};
}
或者,您可以使用 CipherMode::create_or_throw
(reference):
Botan::Cipher_Mode::create_or_throw("AES-128/CBC/PKCS7", Botan::ENCRYPTION);
您还可以通过检查是否定义了 BOTAN_HAS_AES
和 BOTAN_HAS_MODE_CBC
来检查您的 Botan headers 是否支持这些特定算法。如果这些不可用,您必须确保在编译 botan 时包含 AES 和 CBC 支持,例如有:
./configure.py --enable-modules=aes,cbc,...
我刚刚开始使用 Botan。我已将 botan_all.h
包含在我的代码文件中,并在构建时链接到 libbotan-2.a
库。
这里是main.cpp的相关部分:
#include "botan_all.h"
int main(int argc, char *argv[])
{
const std::vector<uint8_t> key = Botan::hex_decode("2B7E151628AED2A6ABF7158809CF4F3C");
std::unique_ptr<Botan::Cipher_Mode> enc = Botan::Cipher_Mode::create("AES-128/CBC/PKCS7", Botan::ENCRYPTION);
enc->set_key(key);
}
enc->set_key(key)
导致段错误。我错过了什么?
这可能是由于您的 Botan 版本没有在构建时支持指定的算法。如果未找到指定的算法 (reference),则方法 CipherMode::create
returns a nullptr
。然后您必须检查结果,例如:
if (enc == nullptr) {
throw std::runtime_error{"Cipher not supported!"};
}
或者,您可以使用 CipherMode::create_or_throw
(reference):
Botan::Cipher_Mode::create_or_throw("AES-128/CBC/PKCS7", Botan::ENCRYPTION);
您还可以通过检查是否定义了 BOTAN_HAS_AES
和 BOTAN_HAS_MODE_CBC
来检查您的 Botan headers 是否支持这些特定算法。如果这些不可用,您必须确保在编译 botan 时包含 AES 和 CBC 支持,例如有:
./configure.py --enable-modules=aes,cbc,...