引入 PHP 官方网指南的一段话,以下:
为什么例如 md5() 和 sha1() 那样的普遍散列涵数不适感适用在登陆密码维护情景?
MD5,SHA1 及其 SHA256 那样的散列优化算法是朝向迅速、高效率开展散列解决而设计方案的。伴随着技术性发展和测算机硬件配置的提高,破译者可使用 暴力行为 方法来找寻散列码所相匹配的初始数据信息。
由于当代化测算机能够迅速的 翻转 所述散列优化算法的散列值,因此许多安全性权威专家都明显提议不必在登陆密码散列中应用这种散列优化算法。
PHP 官方网在得出了已不提议用 md5 对登陆密码开展数据加密的同时,也得出了一个更安全性的对登陆密码数据加密的方式,那么就是,登陆密码散列优化算法涵数 password_hash。
下边以简易的申请注册和登陆的小案例来讲解 password_hash 的使用方法。
最先,建立一个客户表,编码以下:
CREATE TABLE `my_user` ( `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ID , `user_name` varchar(30) DEFAULT COMMENT 客户名 , `user_pwd` varchar(60) DEFAULT COMMENT 登陆密码 , PRIMARY KEY (`user_id`) )&,编码以下:form name= form1 method= post action= {:url( add )} name input name= user_name type= text / pwd input name= user_pwd type= password / input name= submit type= submit value= GOOOOOOOOOOO / /form
储存编码以下:
// 申请注册 加上客户 public function add() if(Request()- isPost()) $data[ user_name ] = input( param.user_name // 客户名 $pwd = input( param.user_pwd // 登陆密码 $data[ user_pwd ] = password_hash($pwd, PASSWORD_BCRYPT); // 数据加密登陆密码 $res = Db::name( user )- insertGetId($data); if($res) $this- success( 加上取得成功 else $this- error( 加上不成功 else return $this- fetch(); },编码以下:form name= form1 method= post action= {:url( login )} name input name= user_name type= text / pwd input name= user_pwd type= password / input name= submit type= submit value= GOOOOOOOOOOO / /form
储存编码以下:
// 登陆 客户分辨 public function login() if(Request()- isPost()) $user_name = input( param.user_name // 客户名 $pwd = input( param.user_pwd // 登陆密码 $enpwd = password_hash($pwd, PASSWORD_BCRYPT); // 数据加密登陆密码 $user = Db::name( user )- field( user_id, user_name, user_pwd )- where( user_name = .$user_name. )- find(); if($user[ user_id ] 0) // $pwd 键入的登陆密码, $user[ user_pwd ] 数据信息库文件恰当登陆密码 if(password_verify($pwd, $user[ user_pwd ])) echo 登陆取得成功 else echo 登陆密码不正确,登陆不成功 else echo 客户名不正确,登陆不成功 else return $this- fetch(); }
Отдых 2020 в Сергеевке - спокойный отдых на черном море. Во ...