优点是安全性很高,即使被脱裤,也很难将密文解密,因为同一个密文,每次加密的结果都不一样,所以没法撞库!
password_hash实际上是对crypt和salt的封装,crypt加密比普通的md5和sha1更加复杂,所以耗时也更加多一些,这可以算是一个缺点,对于用户量很大,经常需要进行登录操作的站点,可能会有性能上的影响。还有一点是通用性不强,因为这种方式只适用于php语言,其他语言是没有办法对密文进行操作的。
刚才测试了一下password_hash的性能,吓的半死。。
md5.php
<?php $stime = microtime(true); $password = "root123@"; $salt = "83979fklsdfgklu9023*&*(&()#&*(Y*(@&*<:L:%:::>><??11!!^%^$%$%^<>YUIYUIhjkdshfJKH#J#HJK#HKl;dskfs"; for($i=0;$i<100;$i++){ $res = md5($password); } $etime = microtime(true); echo "stime:$stime<br/>"; echo "etime:$etime<br/>"; echo "cost:".($etime-$stime);
运行结果:
stime:1478265603.1118
etime:1478265603.1229
cost:0.011116981506348
password_hash.php
<?php $stime = microtime(true); $password = "root123@"; for($i=0;$i<100;$i++){ $res = password_hash($password,PASSWORD_DEFAULT); } $etime = microtime(true); echo "stime:$stime<br/>"; echo "etime:$etime<br/>"; echo "cost:".($etime-$stime);
运行结果:
stime:1478265640.382
etime:1478265646.6675
cost:6.2854981422424
如果是安全性要求特别高的情况下,可以使用password_hash
的方式,这种情况下一般可以通过其他方式提高服务器性能。
不过,大多是情况下,将salt存储在redis,md5之后的密文存储在mysql的方式已经非常安全了,微笑 :)
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》
希望本文所述对大家PHP程序设计有所帮助。
更多相关Discuz论坛的内容来自木庄网络博客
标签:Discuz论坛
相关阅读 >>
php版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
更多相关阅读请进入《Discuz论坛》频道 >>