为什么当我在MD5 Hash中转换相同的C 字符串时,每次都会获得不同的输出

Why when I convert the same C++ string in MD5 hash I obtain every time a different output?

本文关键字:输出 MD5 Hash 为什么 转换 字符串      更新时间:2023-10-16

我使用带有以下命令的python脚本将字符串转换为MD5哈希:

admininfo['password'] = hashlib.md5(admininfo['password'].encode("utf-8")).hexdigest()

此值现在存储在在线数据库中。

现在,我正在创建一个C 脚本以在此数据库上进行登录。在登录过程中,我要求密码,然后将其转换为MD5哈希,以将其与在线数据库中的值进行比较。

但是给出相同的字符串,我每次都会获得不同的MD5哈希值。

我该如何修复?

cin >> Admin_pwd;
cout << endl;
unsigned char digest[MD5_DIGEST_LENGTH];
const char* string = Admin_pwd.c_str();
MD5((unsigned char*)&string, strlen(string), (unsigned char*)&digest);    
char mdString[33];
for(int i = 0; i < 16; i++)
    sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
printf("md5 digest: %sn", mdString);

第一次尝试:

md5 digest: dcbb3e6add7fb94b98c56d7f70b7c46e

第二次尝试:

md5 digest: 2870f4de491ad17d53d6d6e9dae19ca9

第三次尝试:

md5 digest: 84656428baf461093e9fca2c8b05a296

(unsigned char*)&string

您是在指针本身(之后的未指定数据(,而不是指向的字符串。

它会在每个执行(也许(上更改。

您的意思是(unsigned char*)string

使其MD5((unsigned char*)string, ...);放下&人类。您不是将字符数据传递给MD5-您正在传递string指针本身的值(即密码的第一个字符的地址(,以及任何垃圾在堆栈之后都恰好在堆栈上。