使用博坦时segfault

  • 本文关键字:segfault c++ 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)导致segfault。我错过了什么?

这可能是由于您的Botan版本没有支持指定的算法造成的。如果没有找到指定的算法,方法CipherMode::create返回一个nullptr(参考)。然后你必须检查结果,例如:

if (enc == nullptr) {
throw std::runtime_error{"Cipher not supported!"};
}
或者,您可以使用CipherMode::create_or_throw(参考):
Botan::Cipher_Mode::create_or_throw("AES-128/CBC/PKCS7", Botan::ENCRYPTION);

你也可以检查你的Botan头是否支持这些特定的算法,通过检查是否定义了BOTAN_HAS_AESBOTAN_HAS_MODE_CBC。如果这些不可用,您必须确保在编译botan时包含AES和CBC支持,例如:

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

最新更新