我可以用纯文本存储sha256散列密码吗


Can I store sha256 hashed passwords in plain text?

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

谢谢!

实际上这里有两个问题:

1)可以将哈希存储在文件中吗

将密码保存在文件中并不比将其存储在数据库中好或坏。文件的要点是,它应该存储在WWW根目录之外。大多数提供者提供一个私有目录,代码可以访问该目录,但HTTP请求无法访问该目录。

2)使用SHA-256哈希密码是否安全

不应该直接使用SHA-*和MD5来散列密码,因为它们太快了,因此很容易被暴力强制。相反,应该使用像BCrypt、PBKDF2或SCrypt这样的慢速函数,它们提供了一个成本因素,并自动添加了一个安全的盐。

PHP提供了一个密码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。

理想情况下,您应该将它们保存在一个安全的SQL数据库或类似的描述中;哈希应该是第二道防线。

因此,如果你的数据库数据被破坏,黑客掌握了它,他们将无法登录到每个人的帐户。

通常,任何类型的哈希的过程都是,一旦它被推出,它将是有史以来最安全的,然后随着时间的推移,随着人员的聚集和计算机能力的增强,哈希将被"破坏",通常是通过彩虹表的集合,最终会出现一个像THIS这样的网站,这就是Md5的情况。

如果你要将它们存储在.txt文件中,那么在你已经做过的基础上,你至少可以做的就是确保你对散列密码进行SALT。对散列密码进行Salting可以降低其被破解的几率。请参阅下面的链接,了解如何在哈希中添加盐。

电脑爱好者在YouTube上关于主题的精彩视频

CrackStation关于如何对哈希进行加盐的好教程

W3Schools关于哈希/Salting 的好例子