【问题标题】:Seg fault when using Botan使用 Botan 时出现 Seg 错误
【发布时间】:2021-05-28 12:18:05
【问题描述】:

我刚刚开始使用 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-&gt;set_key(key) 导致段错误。我错过了什么?

【问题讨论】:

    标签: c++ botan


    【解决方案1】:

    这很可能是由于您的 Botan 版本未在构建时支持指定的算法。如果未找到指定的算法 (reference),则方法 CipherMode::create 将返回 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 标头是否支持这些特定算法。如果这些不可用,则必须确保在编译 botan 时包含 AES 和 CBC 支持,例如与:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2013-06-04
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多