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 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
php中Ctype函数用法详解
Dec 09 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
tp5.1 框架join方法用法实例分析
May 26 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 变量定义和变量替换的方法
2009/07/30 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
javascript 必知必会之closure
2009/09/21 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
JS跨域问题详解
2014/11/25 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python生成二维码的实例详解
2017/10/29 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python如何读写二进制数组数据
2020/08/01 Python
Java语言程序设计测试题选择题部分
2014/04/03 面试题
初中政治教学反思
2014/01/17 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
交通文明倡议书
2014/05/16 职场文书
读书月活动方案
2014/05/22 职场文书
端午节演讲稿
2014/05/23 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
windows系统搭建WEB服务器详细教程
2022/08/05 Servers