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 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
php防注
Jan 15 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP的PDO事务与自动提交
Jan 24 PHP
PHP模版引擎原理、定义与用法实例
Mar 29 PHP
Laravel框架中缓存的使用方法分析
Sep 06 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 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 短链接算法收集与分析
2011/12/30 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python在文本开头插入一行的实例
2018/05/02 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python 画函数曲线示例
2019/12/04 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
机动车交通事故协议书
2015/01/29 职场文书
死者家属慰问信
2015/03/24 职场文书
MySQL中日期型单行函数代码详解
2021/06/21 MySQL
Java 数据结构七大排序使用分析
2022/04/02 Java/Android