2013-10-24 30 views
4

嗯,我試着在Python中對一個字符串或至少一組數字進行哈希處理,並將其與使用由Scott MacVicar在Arduino上更新的MD5庫生成的數據進行比較,但是我得到的結果是不同的。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個字符處。但生成的哈希的長度是相同的!

我在做什麼錯?由於

編輯:

我從終端使用的命令,並得到:

echo -n 'hello' | openssl md5 

結果:5d41402abc4b2a76b9719d911017c592

這讓我覺得,這個問題的根源是在Arduino的代碼

+0

你的意思是'回聲'你好'嗎?我同意,但是Arduino是錯誤的。 – Duncan

+0

對不起編輯大聲笑是的,但我想知道代碼有什麼問題 – DarkXDroid

+0

你有沒有解決這個問題或向開發者報告這個錯誤? – Cerin

回答

0

我打算假設您從這裏使用MD5庫:https://github.com/tzikis/ArduinoMD5/

它看起來像圖書館有一個錯誤。 MD5::make_hash()函數返回一個指向棧上內存的指針。在調用make_digest()之前,必須修改其中一部分內存,以便產生的摘要部分錯誤。

+0

是的,我認爲圖書館存在一個錯誤。難道它會在最後加上一個「0」?我在論壇中多次看到這個問題 – DarkXDroid