首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我在C++散列中转换相同的MD5字符串时,每次得到不同的输出?

为什么当我在C++散列中转换相同的MD5字符串时,每次得到不同的输出?
EN

Stack Overflow用户
提问于 2019-07-07 14:41:44
回答 2查看 495关注 0票数 0

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

代码语言:javascript
复制
admininfo['password'] = hashlib.md5(admininfo['password'].encode("utf-8")).hexdigest()

此值现在存储在联机数据库中。

现在,我正在创建一个C++脚本来登录这个数据库。在登录期间,我要求输入密码,并将其转换为MD5散列,以便将其与联机数据库中的值进行比较。

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

我怎么才能修好它?

代码语言:javascript
复制
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: %s\n", mdString);

第一次尝试:

md5 digest: dcbb3e6add7fb94b98c56d7f70b7c46e

第二次尝试:

md5 digest: 2870f4de491ad17d53d6d6e9dae19ca9

第三次尝试:

md5 digest: 84656428baf461093e9fca2c8b05a296

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-07 14:46:03

代码语言:javascript
复制
(unsigned char*)&string

您正在散列指针本身(以及后面未指定的数据),而不是它所指向的字符串。

每次执行都会发生变化(也许)。

你是说只有(unsigned char*)string

票数 3
EN

Stack Overflow用户

发布于 2019-07-07 14:45:56

使它成为MD5((unsigned char*)string, ...);去掉符号。您没有将字符数据传递给MD5 --您传递的是string指针本身的值(即密码的第一个字符的地址),再加上它之后的堆栈上的任何垃圾。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56923131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档