password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。 password_hash() 兼容 crypt()。 所以, crypt() 创建的密码散列也可用于 password_hash()。
password_verify — 验证密码是否和散列值匹配
crypt() 使用的是单向算法
vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php
/**
* Hash the given value.
*
* @param string $value
* @param array $options
* @return string
*
* @throws \RuntimeException
*/
public function make($value, array $options = [])
{
$hash = password_hash($value, PASSWORD_BCRYPT, [
'cost' => $this->cost($options), // 10 用来指明算法递归的层数
// salt 供散列密码的盐值,最好选择简单的使用默认产生的盐值
]);
if ($hash === false) {
throw new RuntimeException('Bcrypt hashing not supported.');
}
return $hash;
}
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = [])
{
if (strlen($hashedValue) === 0) {
return false;
}
return password_verify($value, $hashedValue);
}
测试结果:(60个字符) Hash:$2y$10$DzSZNpytRNVnxzrI0GvhZu/6I.lyP6mHadg9b4hCw6SaBrXZFVKC2 bool(true) Hash:$2y$10$GTIHs98/RoEOPoSNSns8q.FrAP1RHJCmDZxWFR0yOy.WmijlLC3DG bool(true) Hash:$2y$10$WuVTezFlGQh66/78HOjABeHSWvTIxfoY4tx7Sy8qrD2YTqbOnKv2W bool(true)
$hash = password_hash('peter', PASSWORD_BCRYPT, [ 'cost' => 10, ]); print_r('Hash:' . $hash . ' '); $res = password_verify('peter', $hash); var_dump($res);exit();