在我们的密码加密中常常使用md5或者 SHA1 等,但是这些方法已经不是最优的解决方案,想到的方法是加盐,在php中加盐的方法有很多种,其中内置的方法password_hash比较经典,最近研究,感觉比md5、sha1等方法要好的多,特记之。
封装的代码
$cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
return $cost;
}
private function options(){
return ['cost' => $this->readCost(),];
}
public function pwd($pwd){
return password_hash($pwd, $this->algo, $this->options());
}
public function verify($pwd,$hash){
$ msg =array("success"=>false,"newhash"=>false,"msg"=>"");
if (password_verify($pwd, $hash)) {
if (password_needs_rehash($hash, $this->algo, $this->options())) {
$newHash = $this->pwd($pwd);
$msg=array("success"=>true,"newhash"=>true,"msg"=>$newHash);
}else{
$msg=array("success"=>true,"newhash"=>false,"msg"=>"");
}
} else {
$msg=array("success"=>false,"newhash"=>false,"msg"=>"");
}
return $msg;
}
}
使用例子
pwd("123456"); echo "hash str:".$hash."; #验证密码的正确性,$hash为存库的hash值, $hrs=$cyh->verify("123456", $hash); if($hrs['success']){ #程序判断是否重新生成hash值, if($hrs['newhash']){ #重新生成hash值,更新数据库的hash值 $nhash=$hrs['msg']; echo "认证成功,hash:".$nhash; }else{ echo "认证成功,hash未更新!"; } }else{ echo "verify false"; }
海报
0 条评论
112
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~