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 visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
php数组一对一替换实现代码
Aug 31 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
php数组去重的函数代码
Feb 03 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP 裁剪图片
Mar 09 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中使用灵巧的体系结构
2006/10/09 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python实现栈的方法
2015/05/26 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python中协程用法代码详解
2018/02/10 Python
python查看数据类型的方法
2019/10/12 Python
python三引号如何输入
2020/07/06 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
编辑找工作求职信分享
2014/01/03 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
辞职信的写法
2015/02/27 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
golang 实现并发求和
2021/05/08 Golang
详解在OpenCV中如何使用图像像素
2022/03/03 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python