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

11

我正在使用PHP和CodeIgniter框架连接到MySQL数据库。 我希望在数据库中加密存储密码,想知道最佳方法。

8个回答

10

根据vt的回答,phpass实现了BCrypt方案,就像那篇文章中描述的那样。这是链接,可以帮助你节省麻烦:http://www.openwall.com/phpass/ - TimB

6

请注意,在上面链接的第二篇帖子的末尾,Jeff包含了一个更新,其中包含一个现在已经失效的Thomas Ptacek文章的链接。但这是与AviewAnew的回复中链接的同一篇文章,并且绝对必读:http://www.securityfocus.com/blogs/262。此外,请查看vt关于phpass的答案。 - TimB

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

1

我在将密码存入数据库之前总是先对其进行md5sum加密,然后再对登录尝试的密码进行md5sum加密以与数据库中的密码进行比对。为了安全起见,我使用带有userID(用户名)和md5sum加密后的密码的where子句进行选择查询,只有当两者都匹配时才会返回任何行。

此外,如果您需要对密码进行混淆,mysql内部也会使用md5sum加密。


1

使用哈希函数;MD5 可以胜任。不要存储密码,而是存储哈希值。然后,要登录用户,请对其输入的密码进行哈希处理,并将其与数据库中的哈希值进行比较;如果哈希值匹配,则它们是合法的。

此外,在对密码进行哈希处理之前,添加一个盐。这可以很容易地实现,只需将一个字符串附加到密码上,例如您的域名或某些其他应用程序唯一的数据。这可以防止黑客使用彩虹表攻击您的哈希值。


1
永远不要存储密码。使用单向哈希并存储它。

0

嗯,我会根据写入密码存储和验证时想到的任何数学方法进行多次哈希。

从现在开始,我可能会尽可能地选择OpenID,无论我是否有实际选择,这样我就不必进行任何密码存储。这样我就可以把密码留给专家,而用户已经信任了第三方。


0

我同意使用哈希和盐值。但我不同意选择一个全站通用的哈希值。为每个用户使用不同的盐值,以防止一次性字典攻击所有密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接