详细说明密码的PHP处理的几种方法
在PHP中,用户的身份经常被认证。本文旨在讨论密码的处理,也就是密码的加密。MD5
我相信,当许多PHP开发人员第一次接触PHP时,处理密码的首选加密函数可能是MD5。
MD5密码=美元(美元_post {密码));
这个代码熟悉吗但是,MD5加密并不是很安全,因为它的加密算法有点简单,但是很多破解密码的网站都存储了大量的密码字符串MD5加密后,所以在这里我不仅还提倡加密用户的MD5密码。
SHA256和SHA512
事实上,在同一时期前的MD5、SHA1加密方法有一个,但算法相对简单,所以在这里不介绍。和SHA256和SHA512来自SHA2系列加密功能。你可以猜名字。这两种加密方法分别生成256和512位长度的哈希字符串。
它们的用途如下:
密码哈希(美元= SHA256
PHP有一个内置的hash()函数,你只需要通过加密的方式来hash()函数,可以直接实现MD5,SHA1,SHA512,和其他的加密方法。
盐的价值
在加密的过程中,我们也有一个很平常的事情:盐值。是的,当我们加密时,我们会在加密字符串中加一个额外的字符串,以达到一定的安全目的,并且应该记录盐的值,以便于以后比较。
功能generatehashwithsalt($密码){
intermediatesalt美元= MD5(uniqid(RAND(),真的));
$盐= substr(intermediatesalt美元,0, 6);
返回哈希(SHA256
}
跨平台文件加密工具
BCrypt是一个更好的方式来加密,但后来哈希API更好。
功能generatehash($密码){
如果(定义(crypt_blowfish )crypt_blowfish){
盐=2y美元美元美元11美元。substr(MD5(uniqid(RAND((((),真)),0, 22);
返回地穴($密码,盐);
}
}
BCrypt的实际上是一个组合的河豚和隐窝()函数。我们用crypt_blowfish确定河豚是可用的,然后生成盐值和上面一样。然而,需要注意的是,隐窝盐值的重要()必须从2美元美元美元美元2y。
密码散列API
这是我们的主要玩法,密码散列API是新功能,仅在PHP 5.5之后,它主要是提供以下功能供我们使用:
(password_hash) / /密码加密。
(password_verify) /验证已加密的密码,检查哈希字符串是一致的。
(password_needs_rehash) / /重新加密的密码。
(password_get_info) / /返回加密算法的名称及相关信息。
使用这套API不仅简单,而且更安全,这也是PHP正式推荐的官方加密方法。
哈希= password_hash美元($ passwod,password_default);
password_default目前使用BCrypt的加密算法,需要注意的是,如果你使用的是password_default代码加密,然后在数据库表中,密码字段是长度超过60个字符,也可以使用password_bcrypt算法,加密字符串长度的算法总是60。
在这里,你可以用password_hash(),你可以不提供盐(盐)的价值和消费价值(成本),你可以把后者作为一种性能的消费价值。代价越大,加密算法越复杂,内存消耗就越大。当然,如果你需要指定相应的盐和消费值,你可以写这个:
$选项= {
盐= > custom_function_for_salt(), / /自定义函数获得盐的价值
成本= 12默认值/成本是10
};
美元($ = password_hash哈希密码,password_default,$选项);
然而,一般的定制成本是好的,盐的价值使用默认值。
加密时,只需要验证密码的正确性。
< PHP
如果(password_verify($密码哈希,$)){
}
{其他
无效
}
直接使用password_verify可以验证我们之前的字符串进行加密(在现有的数据库)。
如果你想改变加密的方式,你必须使用下面的代码重新加密它:
如果(password_needs_rehash($哈希,password_default,{成本' = 12 })){
成本为12
美元($ = password_hash哈希密码,password_default,{成本' = 12 });
散列值并再次保存
}
只有这样,PHP的密码散列API才会知道,我们重新出现了加密方法的替换,这样我们就可以完成密码验证了。
password_get_info(),这个函数通常可以看到以下三个信息:
1算法算法的例子
2、algoname算法名称
3,选项-加密时的可选参数
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。