2012-11-28 31 views
0

我知道我应该将md5(password.salt)保存到数据库中。但我有一些好奇的问题: +我也应该md5的内容/文本字符串以及密码为盐)? 示例:如果数据库被泄露,攻击者无法读取封闭论坛的内容 +如果我不应该读取内容并将它们全部保存为纯文本,那么攻击者试图获取用户密码有什么意义当他手头有数据库?保存到数据库之前应该散列哪些信息?

+0

MD5是* hash *算法,不是* encryption *。如果你有一个只能被特定个人阅读的“封闭式论坛”,那么你可能会考虑使用gpg之类的内容来加密内容,并且每个人都应该能够阅读内容。然后他们可以用他们的私钥解密内容(当然他们不会发送给你)。除了最安全的应用程序之外,这对于所有应用程序来说可能都是过分的。 –

+1

你不应该md5(password.salt)。你应该使用像bcrypt这样的专用密码哈希算法。 md5坏了,不应该被认为是安全的。其他“普通”散列(如SHA1或SHA2)也不适用于安全密码存储。 –

回答

1

散列密码的目的是为了防止获得访问数据库的第三方知道用户密码是什么。你的数据库内容已经被盗用了,所以论坛内容已经暴露。你不想要的是让人们的密码受到损害,因为许多人在多个网站上使用相同的密码。

如果你有一个安全的论坛,那么你需要防止攻击者访问数据库。如果他们进入,您的论坛帖子就会暴露。不要试图进一步保护他们。这个想法是,如果攻击者获得对数据库的访问权限,那么您已经限制了损害的表面积。您的网站数据被泄露,但希望不是用户的凭据。有些人会在您的网站上使用他们的银行用户名和密码,这就是您想要保护的。

请记住,散列函数是一种方法。你不能取消散列数据。这对密码很好:你不需要知道人们的密码是什么,你只需要能够比较它们。它不适用于论坛帖子。散列不是加密。加密的数据可以被解密。散列数据不能被散列。

+0

谢谢!现在理解了。 – gaixixon

+0

@gaixixon - 真正考虑使用BCrypt,这个[tutorial](http://www.martinstoeckli.ch/hash/en/index.php)描述了为什么你需要像BCrypt这样慢速的密钥派生函数。我在使用PHP,可以使用PHP的5.5实现,[兼容包](https://wiki.php.net/rfc/password_hash)可用。 – martinstoeckli

相关问题