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中动态HTML的输出技术
Oct 09 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
php中AES加密解密的例子小结
Feb 18 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
php文件上传原理与实现方法详解
Dec 20 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
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
python实现按长宽比缩放图片
2018/06/07 Python
python argparser的具体使用
2019/11/10 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python多线程正确用法实例解析
2020/05/30 Python
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
洲际酒店集团英国官网:IHG英国
2019/07/10 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
幼儿园消防安全制度
2014/01/26 职场文书
个性与发展自我评价
2014/02/11 职场文书
股东协议书
2014/04/14 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
创业计划书之书店
2019/09/10 职场文书
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
基于Python实现流星雨效果的绘制
2022/03/18 Python
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL