PHP的password_hash()使用实例
一、前言
PHP5.5 (PHP 5 >= 5.5.0) 提供了许多新特性及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()大家根据具体情况取舍把。
原文:http://www.jb51.net/article/48180.htm
PHP的password_hash()使用实例相关推荐
- 前端开发基础知识汇总
一.HTML 1.前言与常用标签 浏览器 内核 备注 IE Trident IE.猎豹安全.360极速浏览器.百度浏览器 firefox Gecko 可惜这几年已经没落了,打开速度慢.升级频繁.猪一样 ...
- Spring Cloud微服务系统架构的一些简单介绍和使用
Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...
- DM达梦数据库 - 设置忽略关键字方法,login关键字处理实例演示
实例 sql 语句如下: INSERT INTO INTELLIV_USER (ID, LOGIN, PASSWORD_HASH, FIRST_NAME, LAST_NAME, EMAIL, IMAG ...
- 10 个 PHP 常见安全问题(实例讲解)
2020相对于其他几种语言来说, PHP 在 web 建站方面有更大的优势,即使是新手,也能很容易搭建一个网站出来.但这种优势也容易带来一些负面影响,因为很多的 PHP 教程没有涉及到安全方面的知识. ...
- Yii2搭建后台并实现rbac权限控制完整实例教程
分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...
- 【php】 PHP数据库实例
文章目录 实例简介及准备 操作1:数据准备 操作2:建立major表 操作3:建立user表 登录界面 登录认证 操作1:判断是否认证成功 操作2:跳转到主页面 操作3:密码输入错误跳转到登录页面 操 ...
- flask中将实例对象转化为json对象
** 由于Flask中没有Django的JsonResponse()方法,所以我们如果要将User.query.all()这样查出来的结果集转化为json对象的时候,就需要自己去实现一个转化为json ...
- ECS(Linux)连接RDS,使用命令行方式连接实例
使用命令行方式连接实例 通过命令行连接RDS MySQL数据库,连接方式如下: mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库 ...
- Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败
[Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...
最新文章
- unity3D小小白之雾效
- Javascript迄今为止添加了前导零
- 完成这个例子,说出java中针对异常的处理机制。
- 浅谈安卓线程池相关问题
- 解决错误: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
- zookeeper 密码_「附源码」Dubbo+Zookeeper 的 RPC 远程调用框架
- 团队行为心理学读书笔记(3)领导力背后的行为心理学
- 100个最古老互联网域名 最久只有23年(附名单)
- 营收放缓、股价暴跌、高管离职,Facebook迎来至暗时刻?
- java sound 数据处理_Java Sound API:捕获目标端口的声音输出
- Android利用温度传感器实现带动画效果的电子温度计
- 如何使keystone更有效率
- ubuntu下安装jre 7
- python 执行dos命令_对python中执行DOS命令的3种方法总结
- ESP8266驱动RDA5807实现的FM收音机,可连接WiFi显示B站粉丝数
- python控制风扇_Python 语音控制普通风扇实现教程
- bilibili封面提取
- js 浏览器窗口活跃监听
- Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等
- NBOOT分析-S3C244xInit.s(1)
热门文章
- 台阶问题(洛谷-P1192)
- 输出浮点数(信息学奥赛一本通-T1027)
- 在nlog(n)时间里对单链表排序
- 计算机应用能力power,全国专业技术人员计算机应用能力考试专用教材——PowerPoint 2003中文演示文稿5日通题库版(双色)(附光盘) - 中国考研网...
- 如何用计算机处理频谱,如何使用PicoScope PC示波器对CD播放器的音频频谱进行分析...
- python中怎么安装sklearn_如何安装Sklearn for Reinteract?
- python将mat文件转为png
- delphi测试服务器响应时间,负载测试中的页面响应时间 - Visual Studio (Windows) | Microsoft Docs...
- linux版vmware卡顿,Manjaro下Vmware安装的MacOS10.15遇到的性能问题导致几乎无法启动问题及解决...
- python oled_用官方的SSD1306.py 驱动 OLED