安全密码存储

3
我正在开发一个需要用户登录的Web服务。我将在SQL数据库中存储用户数据,并通过PHP进行输入/输出。但我不想公开存储它。我该如何在PHP中加密密码,以便只有知道密码的人才能解锁它?
我知道像phpBB这样的服务在存储密码时使用某种隐藏/加密方式。
7个回答

5

我想你是指的mhash库。 - rook
@Rook,是的,抱歉。夜里太晚了 :) - El Yobo

3

通过使用标准库,最简单的方法来确保你的密码存储方案安全。

因为安全性往往比大多数程序员自己处理更加复杂,并且存在更多不可见的错误可能性,因此使用标准库几乎总是最容易和最安全(如果不是唯一)的选择。

有关更多信息,请参见此答案


谢谢!您的示例似乎可以直接使用。正是我现在所需要的。以后深入了解它一定很有趣。 - Espen

0

您可能想要对密码进行哈希处理,而不是加密。查看SHA-1。哈希处理意味着您无法像加密一样检索原始数据。相反,您需要对用户输入进行哈希处理,并将其与数据库中的哈希值进行比较,以查看他们是否拥有正确的密码。这样做可以增加安全性,因为如果您的数据库被攻击,一堆哈希值也是无用的。


SHA-1也一样如此。请参考http://www.phocean.net/2009/05/10/sha-1-vulnerable-consider-sha-2.html。 - Andreas Wong

0

保存一个MD5哈希值,并为了增加安全性,添加盐。


2
MD5不再建议使用,因为已经发现了漏洞,因此我建议使用SHA1。 - m.edmondson
2
它仍然是社区脚本的有效哈希,与盐一起使用和任何哈希一样好。 - Breezer
即使在使用盐的情况下,md5decrypter.com也会给出无效的结果,即使哈希值被成功"解密"了。 - slayerIQ

0

使用SHA-1(sha1 php内置函数)对密码进行哈希处理,并进行多次盐值递归(与上面答案中的相同代码,只需循环几次即可)。这应该足够保护,因此即使入侵者以某种方式获取了哈希值,他们也不应该能够破解它们...


0

嗯,你不应该用MD5加密它们(这并不是真正安全的,大多数黑客都有转换表)。

因此,你可以使用SHA1进行哈希(通常使用)。

如果你想要更高的安全性,你可以添加更多的“盐”,这是一个你可以像这样添加的“密钥”(只是一个例子,通常使用):

salt+sha1(salt+pass)

这个组合可以与许多语言一起使用。


SHA1已不再安全,而SHA256或512则是安全的。 - DampeS8N
@DampeS8N 7实际上那是不正确的。sha1更加强大,足够强大以至于没有人生成冲突,并且仍然是NIST推荐的哈希函数。当然,应该使用sha256。 - rook

-1

有可能对密码进行哈希处理(最好加盐):

$salt = random_string($length = 5);
$hash = $salt . sha1($salt . $password);

或者存储加密数据(仅在您的MySQL连接已经SSL加密的情况下):

INSERT INTO `user` (`user`,`pass`) VALUES("username",ENCRYPT("password","secretkey"))

1
SSL 只涉及数据在传输过程中的安全性,所以我不太理解你最后的评论。 - m.edmondson
1
使用MySQL的加密应该避免很多原因。最大的原因是它不是单向的。因此,如果被访问,它可以被解码。 - DampeS8N
@m.edmondson:这就是关键。嗅探的流量不是明文。因此,“secretkey”不会可见。@DampeS8N:我知道它不是单向的。我试图指出另一种“安全地”存储密码而不使用明文的方法。 - Linus Kleen

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