好吧,我尝试在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代码
我假设您正在从这里使用 MD5 库:https://github.com/tzikis/ArduinoMD5/
看起来该库有一个错误。 MD5::make_hash()
函数返回指向堆栈上内存的指针。 在调用 make_digest()
之前必须更改其中一些内存,因此生成的摘要部分错误。