PHP的password_hash()使用实例
2015-01-24信息快讯网
这篇文章主要介绍了PHP的password_hash()使用实例,需要的朋友可以参考下
一、前言
PHP5.5提供了许多新特性及Api函数,其中之一就是Password Hashing API(创建和校验哈希密码)。
它包含4个函数:password_get_info()、password_hash()、password_needs_rehash()、password_verify()。
在PHP5.5之前,我们对于密码的加密可能更多的是采用md5或sha1之类的加密方式(没人像CSDN那样存明文吧。。),如:
echo md5("123456"); //输出: e10adc3949ba59abbe56e057f20f883e
但是简单的md5加密很容易通过字典的方式进行破解,随便找个md5解密的网站就能获取原始密码。
二、Password Hashing API
php5.5提供的Password Hashing API就能很好的解决这些问题。
我们先来看password_hash()函数:
string password_hash ( string $password , integer $algo [, array $options ])
它有三个参数:密码、哈希算法、选项。前两项为必须的。
让我们使用password_hash()简单的创建一个哈希密码:
$pwd = "123456"; $hash = password_hash($pwd, PASSWORD_DEFAULT); echo $hash;
上例输出结果类似:$2y$10$4kAu4FNGuolmRmSSHgKEMe3DbG5pm3diikFkiAKNh.Sf1tPbB4uo2
并且刷新页面该哈希值也会不断的变化。
哈希值创建完毕,我们可以用password_verify()来校验密码是否和哈希值匹配:
boolean password_verify ( string $password , string $hash )
它接收2个参数:密码和哈希值,并返回布尔值。检查之前生成的哈希值是否和密码匹配:
if (password_verify($pwd,'$2y$10$4kAu4FNGuolmRmSSHgKEMe3DbG5pm3diikFkiAKNh.Sf1tPbB4uo2')) {echo "密码正确"; } else { echo "密码错误"; }
基本上使用以上这2个函数就能安全的创建和校验hash密码了,还有另外2个API函数:
password_get_info() //查看哈希值的相关信息 password_needs_rehash() //检查一个hash值是否是使用特定算法及选项创建的
三、点评
虽然通过password_hash()创建的哈希密码更加安全,但是却降低了互操作性。
如我们使用md5方式,在php中用标准的MD5加密,很容易通过其他语言来校验,如node.js:
var hash = crypto.createHash('md5').update("123456").digest('hex'); if(hash == "e10adc3949ba59abbe56e057f20f883e") console.log('密码正确');
而使用password_hash()加密的哈希值基本只能通过PHP的password_verify来校验。
这2种方法各有优劣,是使用md5(或sha1等)+salt(干扰字符串)的方式还是使用password_hash()大家根据具体情况取舍把。
PHP中exec函数和shell_exec函数的区别
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
php中Session的生成机制、回收机制和存储机制探究
PHP Session机制简介及用法
PHP中使用asort进行中文排序失效的问题处理
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
asp.net访问网络路径方法(模拟用户登录)
PHP JSON出错:Cannot use object of type stdClass as array解决方法
php与flash as3 socket通信传送文件实现代码
phpmyadmin出现Cannot start session without errors问题解决方法
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
ThinkPHP行为扩展Behavior应用实例详解
php.ini save_handler 修改不生效的解决办法
kohana框架上传文件验证规则写法示例
PHP开发框架kohana中处理ajax请求的例子
PHP中对各种加密算法、Hash算法的速度测试对比代码
php操作redis中的hash和zset类型数据的方法和代码例子
PHP关于htmlspecialchars、strip_tags、addslashes的解释
PHP同时连接多个mysql数据库示例代码
PHP5各个版本的新功能和新特性总结
zf框架的session会话周期及次数限制使用示例
PHP中isset()和unset()函数的用法小结
php ci框架中加载css和js文件失败的解决方法
PHP中session变量的销毁
php中session退出登陆问题
php的hash算法介绍
php中hashtable实现示例分享
php stripslashes和addslashes的区别
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
解决php接收shell返回的结果中文乱码问题
php使用base64加密解密图片示例分享
PHP set_error_handler()函数使用详解(示例)
php使用exec shell命令注入的方法讲解
php生成图形(Libchart)实例
在PHP上显示JFreechart画的统计图方法