使用 PHP 5.5 创建和验证哈希最简单的方法
来源:互联网 发布:求救暗号 知乎 编辑:程序博客网 时间:2024/06/05 06:10
转自:开源中国 http://www.oschina.net/translate/creating-and-verifying-hashes-in-php-the-easy-way
原文: http://www.jcurcio.com/posts/creating-and-verifying-hashes-in-php-the-easy-way/
PHP 5.5.0 于昨天发布,并带来了一份完整的全新特性与函数的列表。全新API之一就是Password Hashing API.它包含4个函数:password_get_info(), password_hash(), password_needs_rehash(),和password_verify().让我们分步来了解每个函数。
我们首先讨论password_hash()函数。这将用作创建一个新的密码的哈希值。它包含三个参数:密码、哈希算法、选项。前两项为必须的。你可以根据下面的例子来使用这个函数:
1
$password
=
'foo'
;
2
$hash
= password_hash(
$password
,PASSWORD_BCRYPT);
3
//$2y$10$uOegXJ09qznQsKvPfxr61uWjpJBxVDH2KGJQVnodzjnglhs2WTwHu
你将注意到我们并没有给这个哈希加任何选项。现在可用的选项被限定为两个: cost 和salt。妖添加选项你需要创建一个关联数组。
1
$options
= [
'cost'
=> 10,
2
'salt'
=> mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ];
将选项添加到 password_hash() 函数后,我们的哈希值变了,这样更加安全。
1
$hash
= password_hash(
$password
,PASSWORD_BCRYPT,
$options
);
2
//$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22
现在哈希创建完毕了,我们可以通过 password_get_info() 查看新建哈希值得相关信息。 password_get_info() 需要一个参数——哈希值——并返回一个包含算法(所用哈希算法的整数代表形式)、算法名(所用哈希算法的可读名称)以及选项(我们用于创建哈希值得选项)的关联数组。
01
var_dump(password_get_info(
$hash
));
02
/*
03
array(3) {
04
["algo"]=>
05
int(1)
06
["algoName"]=>
07
string(6) "bcrypt"
08
["options"]=>
09
array(1) {
10
["cost"]=>
11
int(10)
12
}
13
}
14
*/
最后,我们已经创建了我们的hash值,查阅了它如何被创建,查阅了它是否需要被重新hash,现在我们需要验证它。要验证纯文本到其hash值,我们必须使用 password_verify(),它需要两个参数,密码及hash值,并将返回 TRUE 或 FALSE。让我们检查一次我们获得的 hashed 看看是否正确。
1
$authenticate
= password_verify(
'foo'
,
'$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22'
);
2
//TRUE
3
$authenticate
= password_verify(
'bar'
,
'$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22'
);
4
//FALSE
通过以上知识,你可以在新的 PHP 5.5.0 版本中迅速且安全的创建 hash 密码了。
- 使用 PHP 5.5 创建和验证哈希最简单的方法
- PHP 5.5 创建和验证哈希最简单的方法
- 一个简单的PHP验证码和验证方法。
- php用户名和密码的简单验证
- PHP创建excel文件简单的方法
- php创建简单的文本日志方法
- 简单属性,方法,对象的创建和使用
- 验证码的创建和使用
- php验证码的封装和使用
- php创建最简单验证码
- PHP使用GD库画简单的验证码
- 【PHP】简单的登陆验证和权限管理
- php写简单的数字和汉字验证码
- php简单的tocken验证
- HTTP的密码验证方法和使用
- 线程的创建和简单的使用
- php 数组的创建修改和使用
- iOS-UIImage的创建和简单使用
- hive datanucleus cache 不一致问题
- sql server 复制表
- Android中的Selector的用法
- POJ 1458/HDU 1159 最长公共子序列
- link
- 使用 PHP 5.5 创建和验证哈希最简单的方法
- WIN7下硬盘安装Centos 6.4 X86_64版记录
- 思维导图MM9使用问题解析
- 关于有些MP3不能在safari上快进的问题
- 本地通知and远程通知
- VS2010编写自定义宏
- ExtJS Layout 3
- 你不知道的Eclipse用法:使用CheckStyle实施编码标准
- Ruby中的类模型学习笔记