遇到的需求如下,将待明文 Hash 所得的结果转成 Hex 字符串。最开始没懂这条需求是什么意思,后来查阅资料之后终于弄到了,总结如下:
字符串中每个字节按照整型读取,将该值转成 16 进制数并转成字符串,最终所有的单个 16 进制串按照顺序拼接就得到了上述字符串的16进制字符串。
代码:
int StringToHex(const std::shared_ptr<char> &psrc, const size_t &srclen,
std::string &strdist)
{
if (nullptr == psrc || 0 == srclen)
{
return -1;
}
strdist.clear();
for (size_t i = 0; i < srclen; ++i)
{
std::stringstream stream;
//避免丢失高位 0 。
stream << std::hex << ((psrc.get()[i] & 0xf0) >> 4) << (psrc.get()[i] & 0x0f);
strdist += stream.str();
}
return 0;
}
为什么大多数算出明文的 Hash 值之后需要转成 Hex 字符串?
主要为了方便查看,因为最开始的 hash 值里面比较杂乱,包括可见字符、不可见字符、负值,有的字符干脆每一位都是 0 ,所以不容易人为的查看和比较。
故将其转成 Hex 字符串,其实转成 Base 64 串也可以。
(SAW:Game Over!)