hashing code c++ linux string hash md5

code - Calcular MD5 de una cadena en C++



hashing c++ code (1)

Está pasando una nueva línea final al programa md5sum , pero no a su código.

Puede ver que el operador de bash <<< agrega una nueva línea:

$ od -ta <<<Hello 0000000 H e l l o nl 0000006

Para evitar esto, use printf :

$ printf ''%s'' Hello | od -ta 0000000 H e l l o 0000005 $ printf ''%s'' Hello | md5sum 8b1a9953c4611296a827abf8c47804d7 -

Alternativamente, podría incluir una nueva línea en la versión de su programa:

std::string str("Hello/n");

Tengo un buen ejemplo de archivos asignados en memoria que calcula el hash MD5 de un archivo. Eso funciona bien sin problemas.

Me gustaría cambiarlo para calcular el hash MD5 de una cadena.

Entonces el ejemplo es:

(incluya #include <openssl/md5.h> para ejecutar este código, y también aumente las cosas si desea ejecutar el que tiene el archivo)

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();

El cambio que hice es:

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();

Pero esto produce el resultado:

8b1a9953c4611296a827abf8c47804d7

Mientras que el comando $ md5sum <<< Hello da el resultado:

09f7e02f1290be211da707a266f153b3

¿Por qué los resultados no están de acuerdo? ¿Cuál está mal?

Gracias.

EDITAR:

Así que tengo la respuesta correcta que está marcada allí. La forma correcta de llamar a md5sum desde la terminal es:

$ printf ''%s'' "Hello" | md5sum

Para evitar que se incluya la nueva línea.