如何正确检查 std::string 是否是 C++ 上的有效 MD5 十六进制哈希?
请记住,我想避免循环,并且不能使用 C++11 中的 boost 库和正则表达式。
这将做到:
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())
请记住,MD5 是 128 位值,即 16 字节。为方便起见,它通常以 32char 十六进制字符串编写。
如果您不需要“查看”您的 md5 值 - 将其保留为 16 字节 - 这样您就不需要像 std::string 这样的花哨结构来存储它。只有 16 字节数组。您也不必验证它,因为您可以存储在 16 字节数组中的所有内容也是有效的 MD5 值;-)