测试PHP中字符串是否为sha1

Lea*_*don 14 php sha1

我打算将密码存储为sha1,所以我需要一种方法来验证它在我网站的另一个点是sha1.我打算使用preg_match,但我不知道如何制作正则表达式模式.有人可以帮助我吗?

谢谢

编辑:我不是要看两个哈希是否匹配.

And*_*ore 46

实际上,您可以使用preg_match()它来确保它是一个40个字符的十六进制字符串:

function is_sha1($str) {
    return (bool) preg_match('/^[0-9a-f]{40}$/i', $str);
}
Run Code Online (Sandbox Code Playgroud)

解释模式:

/        Opening Delimiter
^        Start Of String Anchor
[0-9a-f] Any of the following characters: 0123456789abcdef
{40}     Repeated 40 times
$        End Of String Anchor
/        Closing Delimiter
i        Modifier: Case-Insensitive Search


如果您尝试确保sha1()哈希值与用户提供程序的密码匹配,则只需重新进行如下操作:

if($db_hash == sha1($user_provided_pass))
   echo "Password is correct!";
Run Code Online (Sandbox Code Playgroud)

  • 或者您可以使用[`ctype_xdigit`](http://php.net/ctype_xdigit)(仅检查十六进制数字)和[`strlen`](http://php.net/strlen)(以检查字符串长度). (7认同)
  • 谢谢.你不仅给了我需要的模式,而且还解释了每个位的含义. (2认同)

Kri*_*ves 9

ctype_xdigit要快得多.我通常使用哈希进行查找并发现它非常有用.