哈希密码的最佳方法是什么?

时间:2013-12-28 09:38:26

标签: php hash password-protection password-encryption

我正在开发一个对用户来说非常安全的网站,所以我需要哈希密码。通常我正在使用MD5,但我读到它不再安全了。所以我尝试了PHPass,但后来我读到它也被破解了。所以我尝试了PHP 5.5的password_hash(),但我使用的是HostGator,而PHP则是5.4。此外,我希望能够在不知道的情况下添加盐(如time() * userid()),就像在password_hash()中一样。

散列强度对我来说非常重要,因为我想100%确定我的用户是安全的。那么有一种非常安全的方式,而不是很快就会被攻击的东西吗?

4 个答案:

答案 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 +的库,看看这个项目:

http://rchouinard.github.io/phpass/