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中的Class的几点个人看法
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
php array_slice函数的使用以及参数详解
Aug 30 PHP
php print EOF实现方法
May 21 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP安全防范技巧分享
Nov 03 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
php文件操作相关类实例
Jun 18 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 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实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
原生js实现购物车
2020/09/23 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
python网络应用开发知识点浅析
2019/05/28 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
内业资料员岗位职责
2014/01/04 职场文书
个人简历中自我评价
2014/02/11 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
2014年班务工作总结
2014/12/02 职场文书
2015新学期家长寄语
2015/02/26 职场文书
女方离婚起诉书
2015/05/18 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python