可以将std :: string用于openssl加密密钥吗?

时间:2016-08-09 13:48:18

标签: c++ c++11 openssl

使用openssl时使用std::string是否安全?

我目前正在使用std::vector<uint8_t>来管理与openssl API一起使用的密钥,因为我不确定std::string如何处理不可打印的字符。

2 个答案:

答案 0 :(得分:1)

幸运的是,除了一些诸如短字符串优化之类的内容之外,std::vector<char>std::string之间没有太多差异。

即使里面的字符不是有效的ASCII / UTF8字符/序列,

std::string也不关心它的含义。

这是std::basic_string中的一个不好的事情,遗憾的是其他案例。

答案 1 :(得分:0)

std::string对可打印/不可打印的字符以及编码一无所知。例如,

std::string str;
for(int i = 0; i < 10; ++i){
    str.push_back('\0');
}

是完全有效的字符串。

但安全性可能存在问题。您需要保证所有带加密密钥的内存在被释放时都应填充某些内容(可能为零)。