PHP 5.5 创建和验证哈希最简单的方法详解


Posted in PHP onNovember 07, 2013

我们首先讨论password_hash()函数。这将用作创建一个新的密码的哈希值。它包含三个参数:密码、哈希算法、选项。前两项为必须的。你可以根据下面的例子来使用这个函数:

$password = 'foo';
$hash = password_hash($password,PASSWORD_BCRYPT);
//$2y$10$uOegXJ09qznQsKvPfxr61uWjpJBxVDH2KGJQVnodzjnglhs2WTwHu

你将注意到我们并没有给这个哈希加任何选项。现在可用的选项被限定为两个: cost 和salt。妖添加选项你需要创建一个关联数组。
$options = [ 'cost' => 10,
             'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ];

将选项添加到 password_hash() 函数后,我们的哈希值变了,这样更加安全。
$hash = password_hash($password,PASSWORD_BCRYPT,$options);
//$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22

现在哈希创建完毕了,我们可以通过 password_get_info() 查看新建哈希值得相关信息。password_get_info() 需要一个参数——哈希值——并返回一个包含算法(所用哈希算法的整数代表形式)、算法名(所用哈希算法的可读名称)以及选项(我们用于创建哈希值得选项)的关联数组。
var_dump(password_get_info($hash));
/*
array(3) {
  ["algo"]=>
  int(1)
  ["algoName"]=>
  string(6) "bcrypt"
  ["options"]=>
  array(1) {
    ["cost"]=>
    int(10)
  }
}
*/

先一个被添加到 Password Hashing API 的是 password_needs_rehash(),它接受三个参数,hash、hash 算法以及选项,前两个是必填项。 password_needs_rehash()用来检查一个hash值是否是使用特定算法及选项创建的。这在你的数据库受损需要调整hash时非常有用。通过利用 password_needs_rehash() 检查每个hash值,我们可以看到已存的hash 值是否匹配新的参数, 仅影响那些使用旧参数创建的值。
最后,我们已经创建了我们的hash值,查阅了它如何被创建,查阅了它是否需要被重新hash,现在我们需要验证它。要验证纯文本到其hash值,我们必须使用 password_verify(),它需要两个参数,密码及hash值,并将返回 TRUE 或 FALSE。让我们检查一次我们获得的 hashed 看看是否正确。
$authenticate = password_verify('foo','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22');
//TRUE
$authenticate = password_verify('bar','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22');
//FALSE
PHP 相关文章推荐
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
php 执行系统命令的方法
Jul 07 PHP
PHP简洁函数小结
Aug 12 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php fread读取文件注意事项
Sep 24 PHP
php上传excel表格并获取数据
Apr 27 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 #PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 #PHP
php去除HTML标签实例
Nov 06 #PHP
php实现监听事件
Nov 06 #PHP
php生成扇形比例图实例
Nov 06 #PHP
php多用户读写文件冲突的解决办法
Nov 06 #PHP
php生成图形(Libchart)实例
Nov 06 #PHP
You might like
网络资源
2006/10/09 PHP
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
JS库之wow.js使用方法
2017/09/14 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python实现博客文章爬虫示例
2014/02/26 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python os用法总结
2018/06/08 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
事业单位个人应聘自荐信
2013/09/21 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
小学运动会报道稿
2014/10/04 职场文书
个人职业及收入证明
2014/10/13 职场文书
爱心募捐通知范文
2015/04/27 职场文书
校运会通讯稿
2015/07/18 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技