Ich habe ein schönes Beispiel für Memory-Mapped-Dateien, die den MD5-Hash einer Datei berechnet. Das funktioniert ohne Probleme.Berechnen MD5 einer Zeichenfolge in C++
Ich möchte es ändern, um den MD5-Hash einer Zeichenfolge zu berechnen.
So ist das Beispiel:
(enthalten #include <openssl/md5.h>
diesen Code auszuführen, und auch Sachen zu steigern, wenn Sie das mit der Datei ausgeführt werden sollen)
unsigned char result[MD5_DIGEST_LENGTH];
boost::iostreams::mapped_file_source src(path);
MD5((unsigned char*)src.data(), src.size(), result);
std::ostringstream sout;
sout<<std::hex<<std::setfill('0');
for(long long c: result)
{
sout<<std::setw(2)<<(long long)c;
}
return sout.str();
Die Veränderung, die ich gemacht ist:
std::string str("Hello");
unsigned char result[MD5_DIGEST_LENGTH];
MD5((unsigned char*)str.c_str(), str.size(), result);
std::ostringstream sout;
sout<<std::hex<<std::setfill('0');
for(long long c: result)
{
sout<<std::setw(2)<<(long long)c;
}
return sout.str();
Aber dies führt zu dem Ergebnis:
8b1a9953c4611296a827abf8c47804d7
Während der Befehl $ md5sum <<< Hello
das Ergebnis gibt:
09f7e02f1290be211da707a266f153b3
Warum die Ergebnisse nicht einverstanden sind? Welcher ist falsch?
Danke.
EDIT:
Also habe ich die richtige Antwort, die dort unten markiert ist. Der richtige Weg md5sum
von Terminal zu nennen ist:
$ printf '%s' "Hello" | md5sum
Um zu vermeiden, die neue Linie enthalten ist.
Gibt es einen Wagenrücklauf in der Datei? – Slava
@Slava Es gibt keine Datei. Das "Hallo" ist lediglich eine Zeichenfolge. Könnten Sie bitte klarstellen, was Sie meinen? –
8b1a9953c4611296a827abf8c47804d7 ist richtig für die Zeichenfolge Hallo – deviantfan