C ++:检查字符串是否是有效的MD5十六进制哈希

时间:2013-11-02 00:48:06

标签: c++ regex string md5

如何正确检查std :: string是否是C ++上有效的MD5十六进制哈希?

请记住,我想避免循环,我不能使用boost库,也不能使用C ++ 11中的正则表达式。

2 个答案:

答案 0 :(得分:2)

这样做:

if (value.size() == 32 && value.find_first_not_of("0123456789abcdefABCDEF") == -1)

或者,因为cluracan在评论中提及isxdigit,这可能会更快:

if (value.size() == 32 && std::find_if(value.begin(), value.end(), [](char c) { return !std::isxdigit(static_cast<unsigned char>(c)); }) == value.end())

答案 1 :(得分:1)

请记住,MD5是128位值,即16字节。为方便起见,它通常用32char十六进制字符串编写。

如果你不需要'看'你的md5值 - 保持16bytes - 这样你就不需要任何像std :: string这样的花哨结构来存储它。只需16个字节的数组。您不必验证它,因为您可以存储在16字节数组中的所有内容也是有效的MD5值; - )