我使用PHP和CodeIgniter Framework连接到MySQL数据库。我想将我的密码存储在数据库中加密,并希望知道最好的方法。
答案 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)
另外,如果你需要对这种密码混淆方法有一定程度的信任,mysql会对它的密码使用md5summing。
答案 4 :(得分:1)
使用散列函数; MD5会很好。不存储密码,存储哈希值。然后,要记录用户,请将输入的密码哈希并将其与数据库中的哈希进行比较;如果哈希匹配,它们就是合法的。
此外,在对其进行哈希处理之前,请在密码中添加一个salt。这可以很容易,只需在密码中添加一个字符串,例如您的域名或您应用程序独有的其他一些数据。这可以防止黑客对你的哈希使用彩虹表。
答案 5 :(得分:1)
永远不要存储密码。使用单向散列并存储它。
答案 6 :(得分:0)
答案 7 :(得分:0)
从这里开始,我可能会尽可能多地使用OpenID,无论我有什么实际选择权,所以我根本不需要进行任何密码存储。这样我就可以将密码留给专家,用户已经信任了。
答案 8 :(得分:0)
我同意哈希和盐腌。我不同意选择网站范围的哈希。为每个用户使用不同的salt,以防止对您的所有密码进行字典攻击。