如何使用PHP加密数据库中的密码数据?

时间:2008-10-20 21:24:58

标签: php database

我使用PHP和CodeIgniter Framework连接到MySQL数据库。我想将我的密码存储在数据库中加密,并希望知道最好的方法。

9 个答案:

答案 0 :(得分:10)

从高级概述 - 不要加密,哈希。如果可以,请使用BCrypt。 Here's a long article explaining why BCrypt以及为什么要散列。

答案 1 :(得分:6)

加密密码是个坏主意。如果有人拿到你的数据库,他们可能会得到你用来加密密码的密钥。

真正的解决方案是哈希,加盐,然后存储密码。杰夫阿特伍德有一个很棒的帖子: http://www.codinghorror.com/blog/archives/000953.html

这里有一个讨论“彩虹表”,大量的单词表与他们的MD5总和: http://www.codinghorror.com/blog/archives/000949.html

答案 2 :(得分:2)

最简单的方法是使用phpass,因为它既简单又安全。如果您的PHP安装使用Blowfish,它使用bcrypt;如果没有,则使用md5的多次传递。无论哪种方式,它都比直接md5或sha1更安全。

$hasher = new PasswordHash(8, false);

// Before storing a password
$hash = $hasher->HashPassword($password);

// To check a password against a hash
if ($hasher->CheckPassword($password, $hash))
    // $password and $hash match

答案 3 :(得分:1)

在我将它们放入数据库之前,我总是使用md5sum密码,然后还有md5sum密码登录尝试检查它们对数据库。为了安全起见,我使用带有userID(用户名)和md5summed密码的where子句进行选择查询,这样我就不会得到任何行,除非两者都匹配。

另外,如果你需要对这种密码混淆方法有一定程度的信任,mysql会对它的密码使用md5summing。

答案 4 :(得分:1)

使用散列函数; MD5会很好。不存储密码,存储哈希值。然后,要记录用户,请将输入的密码哈希并将其与数据库中的哈希进行比较;如果哈希匹配,它们就是合法的。

此外,在对其进行哈希处理之前,请在密码中添加一个salt。这可以很容易,只需在密码中添加一个字符串,例如您的域名或您应用程序独有的其他一些数据。这可以防止黑客对你的哈希使用彩虹表。

答案 5 :(得分:1)

永远不要存储密码。使用单向散列并存储它。

答案 6 :(得分:0)

答案 7 :(得分:0)

嗯,基于在编写密码存储和验证时想到的数据,我不止一次地哈希

从这里开始,我可能会尽可能多地使用OpenID,无论我有什么实际选择权,所以我根本不需要进行任何密码存储。这样我就可以将密码留给专家,用户已经信任了。

答案 8 :(得分:0)

我同意哈希和盐腌。我不同意选择网站范围的哈希。为每个用户使用不同的salt,以防止对您的所有密码进行字典攻击。