PHP5.5以后支持password_hash加密,MD5加密OUT了

md5()加密有一个问题,加密后的字符串就固定了,所以很容易就解密!而password_hash()加密,同样的明文每次生成的密码却不相同,显然会更加安全。

笔者实验的演示代码如下:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php 
/*
string password_hash ( string $password , integer $algo [, array $options ] )
*/
// password_hash()函数在PHP5.5后才有效
$password = '123456';

$save_password = password_hash($password, PASSWORD_DEFAULT);
$save_password2 = password_hash($password, PASSWORD_DEFAULT);

// 输出加密后的密码
echo $save_password."<br>";
echo $save_password2."<br>";

// md5加密后的密码
echo md5($password)."<br>";

/*
boolean password_verify ( string $password , string $hash )
*/

// 明文密码与加密后的密码验证,返回布尔值。
$verify_result = password_verify($password, $save_password);
$verify_result2 = password_verify($password, $save_password2);
var_dump($verify_result);
var_dump($verify_result2);
?>

演示结果:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//123456生成HASH加密密码(页面刷新就变化)
$2y$10$nCQdypMAZ8Z/AmwYgPQI0OHpVbqooYlrQ1QpDpt01wmQrUK2.LcoO

//123456生成HASH加密密码(页面刷新就变化)
$2y$10$Jif15g.7BgdzZV/WgpZ1sOrPlZO1WDUu5WJA67zX7t7rINvFNGckG

//md5生成123456加密的密码(每次都是固定的)
e10adc3949ba59abbe56e057f20f883e

//password_verify()验证hash加密后的密码
boolean true

//password_verify()验证hash加密后的密码
boolean true

备注:虽然HASH加密后的密码,每次都不同,但是使用password_verify()函数还是可以验证密码是否正确。常用于用户登录、注册。