2016-08-09 5 views
1

opensslを使用する場合、キーにstd::stringを使用するのは安全ですか?openssl暗号キーにstd :: stringを使用できますか?

std::stringが印刷できない文字を処理する方法がわからないため、現在はstd::vector<uint8_t>をopenssl APIで使用するための管理に使用しています。

+0

はい、可能ですが、通常はゼロ割り当てのアロケータを使用します。そして、[SGI 'Rope '](http://www.sgi.com/tech/stl/Rope.html)は連結を提供するのでより良い選択かもしれません。文字特性のオーバーヘッドはありません。 – jww

答えて

0

std::stringは、エンコードについての印刷可能/印刷不可能な文字については何も知りません。例として、

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

は完全に有効な文字列です。

しかし、セキュリティに問題がある可能性があります。あなたは、暗号鍵を持つすべてのメモリが、解放されているときに何か(ゼロかもしれない)で満たされることを保証する必要があります。

1

短い文字列最適化のようなものを除けば、std::vector<char>std::stringの間には多くの違いはありません。

std::string内部の文字が有効なASCII/UTF8文字/シーケンスでなくても、それが保持している内容にはまったく気にしません。

これは残念ながら残りの場合はstd::basic_stringの悪いものの1つです。

+0

私が見つけた最大の違いは 'std :: string'は常にコピーして返すことができますが、' std :: vector'はそれをコピーできません。 – jww

関連する問題