C++:如何将带有 md5 哈希的 wstring 转换为字节* 数组

C++: How to convert wstring with md5 hash to byte* array?

本文关键字:转换 wstring 字节 数组 哈希 md5 C++      更新时间:2023-10-16
std::wstring hashStr(L"4727b105cf792b2d8ad20424ed83658c");
//....
byte digest[16];

如何在摘要中获取我的 md5 哈希?我的回答是:

wchar_t * EndPtr;
for (int i = 0; i < 16; i++) {
std::wstring bt = hashStr.substr(i*2, 2);
digest[i] = static_cast<BYTE>(wcstoul(bt.c_str(), &EndPtr, 16));
}
你需要

hashStr中读取两个字符,将它们从十六进制转换为二进制值,并将该值放入digest的下一个位置 - 按此顺序:

for (int i=0; i<16; i++) {
    std::wstring byte = hashStr.substr(i*2, 2);
    digest[i] = hextobin(byte);
}

C-way(我没有测试它,但它应该可以工作(尽管我可以在某个地方搞砸了(,无论如何你都会得到该方法(。

memset(digest, 0, sizeof(digest));
for (int i = 0; i < 32; i++)
{
    wchar_t numwc = hashStr[i];
    BYTE    numbt;
    if (numwc >= L'0' && numwc <= L'9')             //I assume that the string is right (i.e.: no SGJSGH chars and stuff) and is in uppercase (you can change that though)
    {
        numbt = (BYTE)(numwc - L'0');
    }
    else
    {
        numbt = 0xA + (BYTE)(numwc - L'A');
    }
    digest[i/2] += numbt*(2<<(4*((i+1)%2)));
}