在我开始之前,我很想再次提出这个问题,因为很多用户都这样做了,但是通过我做的一项研究,我对我的发现并不满意。我只是希望在这里提出一些真正有用的东西。PHP密码保护足够安全
由于MD5或SHA-1被认为是不好的做法(即使使用盐时???),我试图对散列我的密码
$password = $_POST['password']; // lets say that my password is: [email protected]
function encrypt_the_password($password){
$salt = "[email protected]@d1p1sc1ng3lit";
return hash('sha256', $salt.$password);// can use also different algorithm like sha512 or whirlpool
}
$hashed_password = encrypt_the_password($password);
注意,这一个我用它在个人创建此功能只有一个用户的网站,我。在有一个以上的用户的情况下,我想出了这样的事情:
$password = $_POST['password'];
function generate_salt() {
$salt = uniqid(md5("[email protected]@d1p1sc1ng3lit".microtime()));
$salt = hash('sha256', $salt);// can use also different algorithm like sha512 or whirlpool
return $salt;
}
function encrypt_the_password($password,$salt){
return hash('sha256', $salt.$password);// can use also different algorithm like sha512 or whirlpool
}
$hashed_password = encrypt_the_password($password,generate_salt());
这是足够安全(在每种情况下),或者可以在此改善更???
我编辑:我试图想出一些新的使用crypt()函数。这是我在具有只有一个用户,管理一个网站的情况下,代码:
$password = $_POST['password'];
$salt = "L0r3mIpsUmD0l0rS1tAm3t";
$hashed_password = crypt($password', '$2a$12$' . $salt);
,并在有一个以上的用户现场的情况:
$password = $_POST['password'];
function generate_salt() {
$salt = uniqid(sha1("L0r3mIpsUmD0l0rS1tAm3tc0ns3CT3tur4d1p1sc1ng3lit".microtime()));
$salt = substr(sha1($salt), 0, 22);
return $salt;
}
$hashed_password = crypt($password', '$2a$12$' . generate_salt());
这是正确的,或者需要改进? ??
如何添加迭代到这?我不明白。我的意思是,如果我迭代sha256 1000次,是不是总是返回相同的散列字符串? – Lykos
@Lykos:你*不*添加迭代。我只是指出你为什么散列不好。 *不要使你自己的密码哈希函数*。使用Bcrypt或pbkdf2。 – Blender
Bcrypt与crypt()相同? – Lykos