如何检查Laravel Hash是否有字符串?

时间:2016-10-14 02:55:52

标签: php regex laravel laravel-5 bcrypt

在我使用Laravel 5.1的项目中,除了Hash默认类之外,我还使用我的库来加密密码。那么我怎样才能检查Laravel Hash是否有一个字符串?示例:

$ 2Y $ 10 $ ug8B6Pxs546eQBNICxsEOOH3NgpXjOIo.g4rf1FPZk2xJncWcFUpu

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

你可以检查长度

if( strlen($hash) == 60 )
  

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。   这将使用“$ 2y $”生成标准的crypt()兼容哈希   标识符。结果将始终为60个字符的字符串,或者为FALSE   失败。

http://php.net/manual/en/function.password-hash.php

此外,您可以检查$ 2y $标识符。像这样的regx

  preg_match('/^\$2y\$/', $hash );

或者甚至使用strpos($hash, '$2y$'),虽然我不确定它会给我带来什么偏移。

所以例如

 $hash = '$2y$10$ug8B6Pxs546eQBNICxsEOOH3NgpXjOIo.g4rf1FPZk2xJncWcFUpu';

 if( strlen($hash) == 60 && preg_match('/^\$2y\$/', $hash ))

你可以非常自信,如果它以$2y$开头并且长度为60,那么它就是哈希。可能会有非零的机会遇到类似的东西,但它实际上是无法的。