【发布时间】:2020-10-13 21:08:05
【问题描述】:
在我的 linux 机器上,为了在套接字上进行身份验证,我必须计算一个 md5 哈希码。 (我知道 md5 已经过时了)。安装 Openssl 后,我可以在 Eclipse 中编译这段代码:
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;
这段代码给出了这个输出:
Result : Y����P2KT�L����
md5_pwd : �?�a'=����Y��aOY����P2KT�L����
不知道是否需要初始化'result'和'md5_pwd'。 'nonce' 将在稍后使用。
我有两个问题:
- 每次运行此代码都会给出不同的输出。我希望计算 md5 哈希每次都会得到相同的结果。
- 为什么第一个哈希(为“结果”计算)附加到第二个哈希?
本
【问题讨论】:
-
MD5不输出一串可打印字符,它输出一个 128 位的哈希值。如果要将其输出到屏幕,则需要将二进制转换为可打印的表示。我理解这可能会造成混淆,因为纯二进制数据与许多字符串类型是相同的数据类型 (unsigned char*) -
我对这样的输出不感兴趣,输出只是为了测试而创建的。并且测试表明,每次运行都会给出不同的结果,并且第一个结果会附加到第二个结果。这就是问题