1

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

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

4

2 回答 2

2

这将做到:

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

或者由于 cluracanisxdigit在评论中提到,这可能会更快:

if (value.size() == 32 && std::find_if(value.begin(), value.end(), [](char c) { return !std::isxdigit(static_cast<unsigned char>(c)); }) == value.end())
于 2013-11-02T01:01:56.683 回答
1

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

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

于 2013-11-02T06:40:16.950 回答