2013-10-24 2 views
4

Ну, я попробовал хэшировать строку или хотя бы набор чисел в Python и сравнить ее с тем, который был сгенерирован с использованием библиотеки MD5, обновленной Scott MacVicar на Arduino, но результаты, которые я получаю, различны.Arduino & Python MD5

Arduino Код:

#include <MD5.h> 

void setup() 
{ 
    //initialize serial 
    Serial.begin(9600); 
    //give it a second 
    delay(1000); 
    //generate the MD5 hash for our string 
    unsigned char* hash=MD5::make_hash("hello"); 
    //generate the digest (hex encoding) of our hash 
    char *md5str = MD5::make_digest(hash, 16); 
    //print it on our serial monitor 
    Serial.println(md5str); 
} 

Результат: 5d41402abc4b2a76b9e4080020008c00

Python код:

from hashlib import md5 

m = md5('hello').hexdigest() 
print m  

Результат: 5d41402abc4b2a76b9719d911017c592

Из того, что я могу видеть в каждой попытке, что разница приходит на последних 14 символах. Но длина сгенерированных хэшей одинакова!

Что я делаю неправильно? Благодаря

Edit:

Я использовал команду из терминала и получил:

echo -n 'hello' | openssl md5 

Результат: 5d41402abc4b2a76b9719d911017c592

Что заставляет меня думать, что корень проблемы заключается в Arduino кода

+0

Вы имели в виду 'echo 'hello''? Я согласен, но это Ардуино ошибается. – Duncan

+0

Извините, отредактировал lol yes, но я хотел знать, что не так с кодом в любом случае – DarkXDroid

+0

Вы когда-нибудь разрешали это или сообщали об этой ошибке разработчику? – Cerin

ответ

0

Я собираюсь предположить, что вы используете библиотеку MD5 отсюда: https://github.com/tzikis/ArduinoMD5/

Похоже, что в этой библиотеке есть ошибка. Функция MD5::make_hash() возвращает указатель на память в стеке. Некоторая часть этой памяти должна быть изменена перед вызовом make_digest(), поэтому итоговый дайджест частично ошибочен.

+0

Да, я предположил, что в библиотеке была ошибка. Может быть, он добавляет «0» в конце? Я часто видел эту проблему в форумах – DarkXDroid