opensslを使用する場合、キーにstd::string
を使用するのは安全ですか?openssl暗号キーにstd :: stringを使用できますか?
std::string
が印刷できない文字を処理する方法がわからないため、現在はstd::vector<uint8_t>
をopenssl APIで使用するための管理に使用しています。
opensslを使用する場合、キーにstd::string
を使用するのは安全ですか?openssl暗号キーにstd :: stringを使用できますか?
std::string
が印刷できない文字を処理する方法がわからないため、現在はstd::vector<uint8_t>
をopenssl APIで使用するための管理に使用しています。
std::string
は、エンコードについての印刷可能/印刷不可能な文字については何も知りません。例として、
std::string str;
for(int i = 0; i < 10; ++i){
str.push_back('\0');
}
は完全に有効な文字列です。
しかし、セキュリティに問題がある可能性があります。あなたは、暗号鍵を持つすべてのメモリが、解放されているときに何か(ゼロかもしれない)で満たされることを保証する必要があります。
短い文字列最適化のようなものを除けば、std::vector<char>
とstd::string
の間には多くの違いはありません。
std::string
内部の文字が有効なASCII/UTF8文字/シーケンスでなくても、それが保持している内容にはまったく気にしません。
これは残念ながら残りの場合はstd::basic_string
の悪いものの1つです。
私が見つけた最大の違いは 'std :: string'は常にコピーして返すことができますが、' std :: vector'はそれをコピーできません。 – jww
はい、可能ですが、通常はゼロ割り当てのアロケータを使用します。そして、[SGI 'Rope'](http://www.sgi.com/tech/stl/Rope.html)は連結を提供するのでより良い選択かもしれません。文字特性のオーバーヘッドはありません。 –
jww