关于php:哈希密码的最佳方法是什么?

What way is the best way to hash a password?

本问题已经有最佳答案,请猛点这里访问。

我在一个对用户来说应该非常安全的网站上工作,所以我需要散列密码。通常我使用的是MD5,但我读到它不再安全。所以我试过phpass,但后来我发现它也被破解了。所以我尝试了使用php 5.5的password_hash(),但是我使用hostgator,php有5.4。另外,我想在不知道的情况下添加盐(如time() * userid()),如password_hash())。

散列强度对我来说非常重要,因为我想100%地确保我的用户是安全的。那么,有没有一种方法是非常安全的,而不是像sha这样的东西很快就会被黑客攻击?


使用这个库,提供前向兼容的password_*函数。

使用的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 */
}


PHP是一个内置的哈希算法,如MD5,SHA1等。然而,从安全的角度来看,它是建议使用这些功能可以轻松地为他们的哈希密码暴力破解工具,通过使用破碎样passwordpro攻击。

它的更好,如果你用你的方式来salting作为一个安全的密码。下面是一个例子:

1
2
3
$password = 'yourpassword';
$salt='randomstr!ng';
$password = md5($salt.$password);

甚至更好,在单向散列生成的盐是由它的第一。

1
2
3
$password = 'yourpassword';
$salt=sha1(md5($password));
$password = md5($password.$salt);

这种方式的优势是,它是一个盐值的随机变化,每个密码,使它几乎不可能打破。


这是最好的事情我认为是图书馆管理使用的密码。如果你无法使用这个库,你可以尝试PHP 5.5是作品的php5.3 +,看看在这项目:

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


采取一看http://net/手册/德/ function.crypt.php

你应该考虑使用的盐,以防止彩虹表攻击在这里你可以找到一个教程:http://///425 www.yiiframework.com维基使用密码的密码存储/