PHP的password_hash函数封装及应用(MD5、SHA1的升级版本)

2022-10-11 21:03:12 112 0
魁首哥

在我们的密码加密中常常使用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
上一篇:汽车加油可以加不同加油站的油吗(不同油号可以混加吗) 下一篇:2022年8月15日是不是装修的吉日(2022年8月15日装修好不好)

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码