微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Botan 时出现段错误

如何解决使用 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 将返回 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,...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。