Ho un bell'esempio di file mappati in memoria che calcola l'hash MD5 di un file. Funziona bene senza problemi.Calcola MD5 di una stringa in C++
Vorrei cambiarlo per calcolare l'hash MD5 di una stringa.
Così l'esempio è:
(comprendono #include <openssl/md5.h>
a eseguire questo codice, e anche aumentare roba se si desidera eseguire quello con il file)
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();
Il cambiamento che ho fatto è:
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();
Ma questo produce il risultato:
8b1a9953c4611296a827abf8c47804d7
Mentre il comando $ md5sum <<< Hello
dà il risultato:
09f7e02f1290be211da707a266f153b3
Perché i risultati sono in accordo? Quale è sbagliato?
Grazie.
EDIT:
Così ho avuto la risposta giusta che è spuntata laggiù. Il modo corretto per chiamare md5sum
dal terminale è:
$ printf '%s' "Hello" | md5sum
Per evitare la nuova linea viene incluso.
Esiste un ritorno a capo nel file? – Slava
@Slava Non ci sono file. "Hello" è semplicemente una stringa. Potresti per favore chiarire cosa intendi? –
8b1a9953c4611296a827abf8c47804d7 è corretto per la stringa Hello – deviantfan