2016-08-09 35 views
1

Ist es sicher, std::string für die Schlüssel zu verwenden, wenn Sie openssl benutzen?Kann std :: string für openssl crypto keys verwendet werden?

Ich verwende derzeit std::vector<uint8_t> für die Verwaltung von Schlüsseln für die Verwendung mit der openssl-API, weil ich nicht sicher bin, wie std::string mit den nicht druckbaren Zeichen handelt.

+0

Ja, es kann, aber Sie wollen in der Regel eine Zero-ing Allocator verwenden. Und ein [SGI 'Rope '] (http://www.sgi.com/tech/stl/Rope.html) könnte sogar eine bessere Wahl sein, weil es Verkettung bietet; aber hat nicht die Eigenschaft Merkmal Overhead. – jww

Antwort

0

std::string weiß nichts über druckbare/nicht druckbare Zeichen sowie über Kodierungen. Als Beispiel,

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

ist eine perfekt gültige Zeichenfolge.

Aber es kann ein Problem mit der Sicherheit geben. Sie müssen sicherstellen, dass der gesamte Speicher mit Kryptoschlüsseln mit etwas gefüllt sein sollte (möglicherweise Nullen), wenn es freigegeben wird.

1

Zum Glück für Sie, beiseite einige Sachen wie kurze String-Optimierungen, gibt es nicht viele Unterschiede zwischen std::vector<char> und std::string.

std::string kümmert es nicht wirklich, was es hält, auch wenn die Zeichen im Inneren keine gültigen ASCII/UTF8 Zeichen/Sequenzen sind.

Dies ist eines der schlechten Dinge in std::basic_string, leider für den Rest der Fälle.

+0

Der größte Unterschied, den ich gefunden habe, ist "std :: string" kann immer kopiert und zurückgegeben werden, während ein "std :: vector" nicht kann. – jww