5

好吧,我尝试在 Python 中散列一个字符串或至少一组数字,并将其与使用 Scott MacVicar 在 Arduino 上更新的 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

蟒蛇代码:

from hashlib import md5

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

结果:5d41402abc4b2a76b9719d911017c592

从我在每次尝试中所看到的情况来看,区别在于最后 14 个字符。但是生成的哈希长度是一样的!

我究竟做错了什么??谢谢

编辑:

我使用来自终端的命令并得到:

echo -n 'hello' | openssl md5

结果:5d41402abc4b2a76b9719d911017c592

这让我认为问题的根源在于 arduino 代码

4

1 回答 1

1

我假设您从这里使用 MD5 库:https ://github.com/tzikis/ArduinoMD5/

看起来那个库有一个错误。该MD5::make_hash()函数返回一个指向栈上内存的指针。在调用之前必须更改其中的一些内存,make_digest()因此生成的摘要部分错误。

于 2013-10-24T22:30:53.490 回答