首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算md5哈希时的混乱输出(新手)

计算md5哈希时的混乱输出(新手)
EN

Stack Overflow用户
提问于 2020-10-13 21:08:05
回答 1查看 136关注 0票数 0

在我的linux机器上,为了在套接字上进行身份验证,我必须计算一个md5哈希码。(我知道md5已经过时了)。安装Openssl之后,我可以在Eclipse中编译以下代码:

代码语言:javascript
复制
unsigned char *MD5(const unsigned char *d, unsigned long n,
             unsigned char *md);

string codewd = "admin:BaseX:admin";
unsigned char result[MD5_DIGEST_LENGTH];
unsigned char md5_pwd[MD5_DIGEST_LENGTH];

// Test 1
const unsigned char* str;
str = (unsigned char*)"Hallooo";
unsigned int long_size = 100;
for (long unsigned int i = 0; i < sizeof(result); i++) result[i] = '\0';
MD5(str, long_size, result);
cout << "Result : " << result << endl;

// Test 2
string nonce = "25009293498380";
const unsigned char * code = (const unsigned char *)codewd.c_str();
for (long unsigned int i = 0; i < sizeof(md5_pwd); i++) md5_pwd[i] = '\0';
MD5((const unsigned char *) code, long_size, md5_pwd);
cout << "md5_pwd : " << md5_pwd << endl;

此代码提供了以下输出:

代码语言:javascript
复制
Result : Y����P2KT�L����
md5_pwd : �?�a'=����Y��aOY����P2KT�L����

我不知道是否有必要初始化‘结果’和'md5_pwd‘。“现在”将在稍后时间使用。

我有两个问题:

每次在此代码上运行

  1. 都会提供不同的输出。我预计每次计算md5哈希都会得到相同的结果。为什么第一个哈希(为“结果”计算)被追加到第二个哈希之后?

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 21:35:36

每次在此代码上运行都会提供不同的输出。

long_size传递给MD5函数,但是输入字符串的长度不是long_size,因此算法读取一堆垃圾。

试试这个:

代码语言:javascript
复制
MD5(str, strlen(str), result);

为什么第一个哈希(为‘结果’计算)被附加到第二个哈希?

md5_pwd不包含终止null,因此将打印经过分配数组的内存内容。印有:

代码语言:javascript
复制
cout.write(md5_pwd, MD5_DIGEST_LENGTH);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64343178

复制
相关文章

相似问题

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