我正在开发一个对用户来说非常安全的网站,所以我需要哈希密码。通常我正在使用MD5,但我读到它不再安全了。所以我尝试了PHPass,但后来我读到它也被破解了。所以我尝试了PHP 5.5的password_hash()
,但我使用的是HostGator,而PHP则是5.4。此外,我希望能够在不知道的情况下添加盐(如time() * userid()
),就像在password_hash()
中一样。
散列强度对我来说非常重要,因为我想100%确定我的用户是安全的。那么有一种非常安全的方式,而不是很快就会被攻击的东西吗?
答案 0 :(得分:7)
使用this library提供与password_*
功能的向前兼容性。
使用示例:
require_once("password.php"); // imports the library, assuming it's in the same directory as the current script
$password = "HelloStackOverflow"; // example password
$hash = password_hash($password, PASSWORD_BCRYPT); // here's the hash of the previous password
$hash = password_hash($password, PASSWORD_BCRYPT, array("cost" => 10)); // you can set the "complexity" of the hashing algorithm, it uses more CPU power but it'll be harder to crack, even though the default is already good enough
if (password_verify($password, $hash)) { // checking if a password is valid
/* Valid */
} else {
/* Invalid */
}
答案 1 :(得分:5)
PHP附带内置哈希算法,如MD5,SHA1等。但是,从安全角度来看,不建议使用这些函数来哈希密码,因为使用Passwordpro等工具可以通过暴力攻击轻松破解密码。 / p>
最好使用salting作为保护密码的方法。以下是一个例子:
$password = 'yourpassword';
$salt = 'randomstr!ng';
$password = md5($salt.$password);
更好的生成盐的方法是首先对其进行散列:
$password = 'yourpassword';
$salt = sha1(md5($password));
$password = md5($password.$salt);
这样做的好处是,盐值是随机的,每个密码都会改变,因此几乎不可能破解。
答案 2 :(得分:0)
查看http://php.net/manual/de/function.crypt.php
你应该考虑使用盐来防止彩虹表攻击 您可以在此处找到教程:http://www.yiiframework.com/wiki/425/use-crypt-for-password-storage/
答案 3 :(得分:0)
我认为最好的办法是使用图书馆来管理密码 如果你不能使用php 5.5你可以尝试这个适用于php5.3 +的库,看看这个项目: