技嘉主板好还是七彩虹GA-945GCM-S2L和七彩虹550ti烈焰战神,还有用吗

其他回答(1)
有!这算法名字叫。
&&&您需要以后才能回答,未注册用户请先。PHP的几个常用加密函数
$password=''; echo
crypt($password); //输出:$1$Fe0.qr5.$WOhkI4/5VPo7n7TnXHh5K
/*第二个$与第三个$之间的八个字符是由PHP生成的,每刷新一次就变一次 */
&&hr&&; echo
crypt($password,&jellybool&); //输出:je7fNiu1KNaEs
/*当我们要加自定义的盐值时,如例子中的jellybool作为第二个参数直接加入, 超出两位字符的会截取前两位*/
&&hr&&; echo
crypt($password,'$1$jellybool$'); //输出:$1$jellyboo$DxH7wF7SygRpWb6XBBgfH/
crypt加密函数有多种盐值加密支持,以上例子展示的是MD5散列作为盐值,该方式下 盐值以$1$的形式加入,如例子中的jellybool加在后两个$符之间, 超出八位字符的会截取前八位,总长为12位;crypt默认就是这种形式。 */
&&hr&&; //crypt还有多种盐值加密支持,详见手册
&&&[2]&&&&&&
【声明】:黑吧安全网()登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱,我们会在最短的时间内进行处理。
上一篇:【】【】2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。标签:至少1个,最多5个
原文来自:
在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:
$password = md5($_POST["password"]);
上面这段代码是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受欢迎了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密用户的密码的。
SHA256 和 SHA512
其实跟前面的MD5同期的还有一个SHA1加密方式的,不过也是算法比较简单,所以这里就一笔带过吧。而这里即将要说到的SHA256 和 SHA512都是来自于SHA2家族的加密函数,看名字可能你就猜的出来了,这两个加密方式分别生成256和512比特长度的hash字串。
他们的使用方法如下:
$password = hash("sha256", $password);
PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
在加密的过程,我们还有一个非常常见的小伙伴:盐值。对,我们在加密的时候其实会给加密的字符串添加一个额外的字符串,以达到提高一定安全的目的:
function generateHashWithSalt($password) {
$intermediateSalt = md5(uniqid(rand(), true));
$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);
如果让我来建议一种加密方式的话,Bcrypt可能是我给你推荐的最低要求了,因为我会强烈推荐你后面会说到的Hashing API,不过Bcrypt也不失为一种比较不错的加密方式了。
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
return crypt($password, $salt);
Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以$2a$或者$2y$开头,详细资料可以参考下面的链接:
更多资料可以看这里:
Password Hashing API
这里才是我们的重头戏,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
password_hash() – 对密码加密.
password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
password_needs_rehash() – 给密码重新加密.
password_get_info() – 返回加密算法的名称和一些相关信息.
虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。
$hash = password_hash($passwod, PASSWORD_DEFAULT);
对,就是这么简单,一行代码,All done。
PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我会说推荐这个,不过因为Password Hashing API做得更好了,我必须郑重地想你推荐Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写:
$options = [
'salt' =& custom_function_for_salt(), //write your own code to generate a suitable salt
'cost' =& 12 // the default cost is 10
$hash = password_hash($password, PASSWORD_DEFAULT, $options);
密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
if (password_verify($password, $hash)) {
// Invalid
很简单的吧,直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了。
然而,如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了:
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' =& 12])) {
// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' =& 12]);
// don't forget to store the new hash!
只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。
简单地说一下password_get_info(),这个函数一般可以看到下面三个信息:
algo – 算法实例
algoName – 算法名字
options – 加密时候的可选参数
所以,现在就开始用PHP 5.5吧,别再纠结低版本了。
Happy Hacking
18 收藏&&|&&111
你可能感兴趣的文章
16 收藏,5.8k
3 收藏,4.5k
本作品 保留所有权利 。未获得许可人许可前,不允许他人复制、发行、展览和表演作品。不允许他人基于该作品创作演绎作品
这种做法很不可取,彻底失去了可移植性,其他语言要来调用基本没法用。
Yii 2 默认使用的
可否给一个其他语言调用的具体应用场景?密码为什么需要调用呢?
我实在不理解这所谓的加密方式有何区别,所谓破解是指得到数据库数据后再去进行破解?那想要破解就只能暴力破解了?所以比来比去就是更耗时的好一点了。好吧,即使md5有很多库,算法简单,那我在存进去的时候加一些其他干扰字符串就行了,比如原来密码是12345,我可以在第一个和第三个位置分别塞入a和b,md5即使被算出来,只有他不知道规则,一样得不到用户密码
只要破解三个应该就可以猜出来了吧
破解三个?很难猜的,他不知道规则,我对密码base64 encode下,然后在encode后的字符串中,不同的位置塞入一些字符串,他没法猜啊,除非是知道代码,并且知道数据库数据,还差不多
那么你在验证密码的时候是如何验证通过的呢?如果每个密码插入的干扰字串在不同的位置的话
在一样的位置啊,破解者不知道位置啊,,把字母塞到base后的字符串,怎么观察的出来
比如说,同步登录
如果要存入cookie如何验证?
不知道password_hash() 把盐存到哪里了...现在用Java 做服务器找不到颜值就无法验证密码啊!暂时还没找到解决办法..
居然在这里发现了你的身影...
现在就是在用md5加md5加盐
现在往往是拖到了一个比较大的数据库,很多用户都是用简单的数字作为密码,比如生日,主要就是对这部分用户进行破解,同一个密码md5每次生成的字符串都一样而且速度极快,把盐值分别插入后对比成功一个用户,那这个库中大部分比较简单的密码就破了;之所以说Bcrypt相对安全一是每次生成的字符串都不一样,增加了难度,二是速度太慢,单纯靠暴力破解的时间至少慢了一万倍。
默认应该没加盐 password_hash()的options参数默认为null
比如要整合会员登录数据库
分享到微博?
技术专栏,帮你记录编程中的点滴,提升你对技术的理解收藏感兴趣的文章,丰富自己的知识库
明天提醒我
我要该,理由是:
扫扫下载 App}

我要回帖

更多关于 1070ti技嘉和七彩虹 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信