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 相关文章推荐
数据库相关问题
Oct 09 PHP
PHP+MYSQL开发工具及资源收藏
Jan 02 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
Sep 13 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
php实现遍历多维数组的方法
Nov 25 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
php基于curl实现的股票信息查询类实例
Nov 11 PHP
thinkPHP多语言切换设置方法详解
Nov 11 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
PHP判断函数是否被定义的方法
Jun 21 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
星际RPG字典
2020/03/04 星际争霸
博士208HAF收音机实习报告
2021/03/02 无线电
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
php实现文件下载实例分享
2014/06/02 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
师德师风自查材料
2014/10/14 职场文书
最美乡村教师观后感
2015/06/11 职场文书
作文之亲情600字
2019/09/23 职场文书
python使用glob检索文件的操作
2021/05/20 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL