php5密码加密方式,PHP5.5使用Bcrypt加密密码

在php5.5中,加入了一个新的密码哈希函数,可使用Bcrypt轻松实现加盐的安全密码。

bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密文一块运算得到另一个密文,如果这两个密文相同则验证成功。

官方手册在这里: http://cn2.php.net/manual/zh/book.password.php

生成密钥

$hash = password_hash('password',PASSWORD_BCRYPT,['cost' => 10]);

echo $hash;

password_hash() —-加密密码

第一个参数:需要加密的密码

第二个参数:密码算法常量 (http://cn2.php.net/manual/zh/password.constants.php)

第三个参数:数组类型。支持两个选项:salt在散列密码时加的盐(干扰字符串)。cost用来指明算法递归的层数。

上面代码每次运行生成的密钥不同,大致效果如下。

$2y$10$bWNfw6QbjmjyCDBc9lrZRuBjraxBzN7eAuozS6D3r4QxJn0tgXRwe

生成的密钥长度为60位,所以设计数据库的时候需要注意。

验证密钥

懒得存数据库再去取了,直接把刚生成的密钥复制过来了~~

$hash = '$2y$10$bWNfw6QbjmjyCDBc9lrZRuBjraxBzN7eAuozS6D3r4QxJn0tgXRwe';

$res = password_verify('password',$hash);

var_dump($res);

如果没有天灾人祸意外发生的话。你会看到下面的输出

bool(true)

这就成功了。

性能

下面我们来看看Bcrypt的性能,安全性的提升,肯定是以性能为代价。bcrypt要加强密码安全性,增加运行时间也是肯定的。那我们现在就测试一下Bcrypt与普通md5的速度。

测试机性能:

CPU I7 4核 2.3G主频

内存 16G ddr3 内存

系统 Mac

PHP 5.5.15

现在用下面这段代码分别测试一下md5和Bcrypt在不加盐的情况下的运行速度

password_hash('password',PASSWORD_BCRYPT,['cost' => 10]); // md5('password');

$e_time = microtime(true); $run_time = $e_time-$s_time;

` echo ($run_time*1000).'ms';

Bcrypt 5次运行结果

68.569183349609ms

68.006992340088ms

69.074869155884ms

68.211078643799ms

68.757057189941ms

md5 5次运行结果

0.0040531158447266ms

0.0040531158447266ms

0.0050067901611328ms

0.0040531158447266ms

0.003814697265625ms

测试结果

Bcrypt 加密一个密文平均值在68毫秒左右,

md5 加密一个密文平均值在0.004毫秒左右,

性能大约差距16000倍

采用md5 一秒大约能加密 250000个密文

采用Bcrypt 一秒大约能加密 14个密文

所以,如果你要将Bcrypt用到你的程序中去的话。小应用还好,如果是大应用。您就得按倍数增加服务器了。

如果不是给五角大楼写程序,其实md5+salt安全性已经足够了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值