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 相关文章推荐
smarty静态实验表明,网络上是错的~呵呵
Nov 25 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
php libevent 功能与使用方法详解
Mar 04 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获得flv视频长度的实例代码
2017/10/26 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
将查询条件的input、select清空
2014/01/14 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
bootstrap table操作技巧分享
2017/02/15 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
详解VUE前端按钮权限控制
2019/04/26 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python sorted函数原理解析及练习
2020/02/10 Python
python中JWT用户认证的实现
2020/05/18 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
阿根廷首家户外用品制造商和经销商:Montagne
2018/02/12 全球购物
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
T3官网:头发造型工具
2019/12/26 全球购物
linux面试相关问题
2012/08/11 面试题
大学自我鉴定
2013/12/20 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
文明班级建设方案
2014/05/15 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
python 远程执行命令的详细代码
2022/02/15 Python