优点是安全性很高,即使被脱裤,也很难将密文解密,因为同一个密文,每次加密的结果都不一样,所以没法撞库!
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论坛
相关阅读 >>
常用网页编辑器漏洞手册(全面版)fckeditor,ewebeditor
discuz! 6.0.0到discuz! 7.0.0升级教程
discuz!5.0升级discuz5.5的图文教程第12页
更多相关阅读请进入《Discuz论坛》频道 >>