php密码加密与验证

  • Jesse
  • 2018-04-17 17:53:34
  • 420

password_hashcrypt()的一个简单封装,并且完全与现有的密码哈希兼容,使用了一个强的哈希算法,来产生足够强的盐值,并且会自动进行合适的轮次。

 

password_hash会生成60个字符,随时间推移,默认算法可能会有变化,因此需要数据库里储存结果的列可超过60个字符(最好是255个字符)

前面7位字符代表hash的相关信息(密码算法类型和密码算法常量),可用password_get_info获取,后面53位为随机字符串。


在生成散列(hash)值时,会自动创建安全的随机盐值。

(在php5.5php7.0时可以手动指定盐值,不过强烈建议不要自己为这个函数生成盐值(salt),因为php7.0以后就废除了)

生成的hash会返回:使用的算法、cost 和盐值,所以验证散列值的所有信息都已经包含在内。 这使 password_verify 函数验证的时候,不需要额外储存盐值或者算法的信息。


例子:

<?php
$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}
?>


本文出自 showcj,转载时请注明出处及相应链接。