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

Can std::string be used for openssl crypto keys?

本文关键字:加密 密钥 openssl 用于 string std      更新时间:2023-10-16

在使用openssl时使用std::string作为密钥是否安全?

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

幸运的是,除了一些像短字符串优化的东西,std::vector<char>std::string之间没有太大的区别。

std::string并不真正关心它所保存的内容,即使里面的字符不是有效的ASCII/UTF8字符/序列。

这是std::basic_string中不好的事情之一,不幸的是在其他情况下。

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

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

是完全有效的字符串。

但是可能存在安全性问题。您需要保证所有具有加密密钥的内存在被释放时都应该填充一些东西(可能是零)。