如何在此代码C++中返回字符串中的md5哈希?

use*_*635 5 c++ string md5

我有这个代码正确显示我,一个字符串的md5.我更喜欢将一个字符串返回给函数,但是在将md5的值转换为我的字符串时遇到了一些问题.这是代码:

string calculatemd5(string msg)
{
string result;
const char* test = msg.c_str();
int i;

MD5_CTX md5;

MD5_Init (&md5);
MD5_Update (&md5, (const unsigned char *) test, msg.length());
unsigned char buffer_md5[16];
MD5_Final ( buffer_md5, &md5);
printf("Input: %s", test);
printf("\nMD5: ");
for (i=0;i<16;i++){
    printf ("%02x", buffer_md5[i]);
    result[i]=buffer_md5[i];
}
std::cout <<"\nResult:"<< result[i]<<endl;
return result;
}
Run Code Online (Sandbox Code Playgroud)

比如result[i]像这样一个奇怪的ascii char:. 怎么可能解决这个问题呢?

Ker*_* SB 9

更清洁的方式(更快)可能是这样的:

std::string result;
result.reserve(32);  // C++11 only, otherwise ignore

for (std::size_t i = 0; i != 16; ++i)
{
  result += "0123456789ABCDEF"[hash[i] / 16];
  result += "0123456789ABCDEF"[hash[i] % 16];
}

return result;
Run Code Online (Sandbox Code Playgroud)


And*_*rsK 6

更换

for (i=0;i<16;i++){
    printf ("%02x", buffer_md5[i]);
    result[i]=buffer_md5[i];
}
Run Code Online (Sandbox Code Playgroud)

char buf[32];
for (i=0;i<16;i++){
    sprintf(buf, "%02x", buffer_md5[i]);
    result.append( buf );
}
Run Code Online (Sandbox Code Playgroud)

请注意,当您打印出结果时,打印result,而不是result[i]获得整个字符串.

如果你将buffer_md5[i]值直接放在结果中,那么你可能会遇到问题,因为字符串可能没有嵌入0(如果有的话).