使用 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_AESBOTAN_HAS_MODE_CBC 来检查您的 Botan headers 是否支持这些特定算法。如果这些不可用,您必须确保在编译 botan 时包含 AES 和 CBC 支持,例如有:

./configure.py --enable-modules=aes,cbc,...