我可以用纯文本存储sha256哈希密码吗?

时间:2016-04-06 07:35:55

标签: php security passwords sha256 password-hash

所以我有一个php代码,它将一个密码版本的密码保存到一个名为passwords.txt的文件中。目前的情况是,任何知道该文件目录(www.example.com/datacache/passwords.txt)的人都可以访问它。这是不正确的做法吗?我以为我按照指南对信件进行了正确的密码处理,但这似乎有点奇怪的不安全。思考?建议?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上这里有两个问题:

1)将散列存储在文件中是否可以

将密码保存在文件中并不比将其存储在数据库中更好或更差。文件的一点是,它应该存储在WWW根目录之外。大多数提供商都提供了一个私人目录,可以通过代码访问,但可以通过HTTP请求进行访问。

2)使用SHA-256进行散列密码是否安全

没有SHA- *和MD5不应该直接用于哈希密码,因为它们太快,因此太容易暴力破解。相反,应该使用像BCrypt,PBKDF2SCrypt这样的慢速函数,它们提供成本因子并自动添加安全盐。

PHP为a password API提供了两个函数password_hash()password_verify()。使用它们,它们是未来的证明并将产生BCrypt哈希。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);

如果您正在运行没有此API的旧版PHP,请升级。如果由于某种原因你不能,请查看password_compat

答案 1 :(得分:0)

理想情况下,您可以将它们保存在安全的SQL数据库中,或者说是某些描述;哈希应该是第二道防线。

因此,如果您的数据库数据遭到破坏并且黑客获得了它,他们将无法登录到每个人的帐户。

通常任何类型的哈希的过程都是这样,一旦它被带出来,它将是最安全的,然后随着时间的推移,随着人员的集合和增加的计算机能力,哈希将是“破碎”通常是通过彩虹表的集合,并最终会有一个像THIS这样的网站,这就是Md5所发生的事情。

如果要将它们存储在.txt文件中,那么除了已经完成的操作之外,您可以做的最小事情就是确保使用哈希密码。 对散列密码进行盐析会降低其被破解的可能性。请参考下面的链接,了解如何使用Salting the hash。

Great video by Computerphile on YouTube about the topic

Good tutorial by CrackStation on how to Salt a Hash

Good examples by W3Schools on Hashing/Salting