2010-12-02 191 views
2

我正在开发一个用户必须登录的Web服务。我将通过PHP将用户数据存储在SQL数据库和输入/输出中。但我不想公开存储它。如何在PHP中加密密码,以便只有知道密码的人才能解锁密码?安全密码存储

我知道像phpBB这样的服务使用某种隐藏/加密存储的密码。

回答

3

最简单的方法来获得您的密码存储方案是安全的使用标准库

由于安全性往往比许多程序员可以独自解决的问题复杂得多,并且存在更多无形的可能性,所以使用标准库几乎总是最简单和最安全(如果不是唯一的话)可用选项。

更多信息,请参见this answer

0

你可能想散列密码 - 不加密它。 Check out SHA-1。散列意味着您无法像使用加密一样检索原始数据。相反,你所做的是对用户输入进行散列,并将其与数据库中的散列进行比较,以查看他们是否拥有正确的密码。这样做会增加安全性,就好像数据库已经被破坏一样 - 一堆哈希值是无用的。

+0

也是如此SHA1 http://www.phocean.net/2009/05/10/sha-1-vulnerable-consider-sha-2。html – 2010-12-02 12:18:55

5

您需要使用适当的安全算法来加密和散列密码。

+0

我认为你的意思是mhash库。 – rook 2010-12-02 17:11:22

+0

@对,对不起。深夜:) – 2010-12-02 20:34:04

0

保存一个MD5哈希,并使其更安全,添加盐。

+2

MD5不再被建议为漏洞已被发现,因此我的SHA1建议 – 2010-12-02 12:15:28

+2

它仍然是社区脚本等的有效散列,与盐一起使用它是一样好所有散列 – Breezer 2010-12-02 12:19:18

+1

不正确。请使用sha256或更高版本。 http://www.md5decrypter.com/ – DampeS8N 2010-12-02 12:48:47

-1

有哈希密码(最好用食盐)的可能性:

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

或存储加密的(只有当你的MySQL连接是SSL加密):

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

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

因此,您可以使用SHA1(通常使用)对其进行哈希处理。

如果您想了解更多的安全性,你可以添加更多的salt这是一个关键您可以添加像这样(只是举个例子,通常使用):

salt+sha1(salt+pass) 

这种组合可以与许多语言使用。

0

在SHA-1(sha1 php内置函数)中进行散列密码与几次盐析递归(上述答案中的代码相同,只循环几次)。这应该是足够的保护,所以即使入侵者以某种方式得到他们的手上的哈希,他们不应该能够破解他们...