我可以以纯文本形式存储 sha256 散列密码吗?
Can I store sha256 hashed passwords in plain text?
所以我有 php 代码将密码的散列版本保存到名为 passwords.txt 的文件中。目前,任何知道文件目录 (www.example.com/datacache/passwords.txt) 的人都可以访问它。这是不正确的做法吗?我以为我按照指南正确地处理了这封信的密码,但这似乎很不安全。想法?建议?
谢谢!
理想情况下,您会将它们保存在安全的 SQL 数据库中,或者类似的描述;哈希应该是第二道防线。
因此,如果您的数据库数据遭到破坏并且黑客掌握了它,他们将无法登录到每个人的帐户。
通常任何类型的哈希的过程是,一旦它被带出,它将是最安全的,然后随着时间的推移,随着人们的收集和计算机能力的增强,哈希逐渐将 "broken" 通常通过彩虹表的集合,最终会得到一个网站,例如 THIS,这就是 Md5 发生的情况。
如果您要将它们存储在 .txt 文件中,您可以在已经完成的基础上做的最低限度是确保您对哈希密码进行 SALT。
对散列密码进行加盐会降低其被破解的机会。请参阅下面的链接,了解如何对哈希进行加盐处理。
Great video by Computerphile on YouTube about the topic
其实这里有两个问题:
1) 可以将哈希存储在文件中吗
将密码保存在文件中并不比将其存储在数据库中好或坏。文件的要点是,它应该存储在 WWW 根目录之外。大多数供应商提供私有目录,可通过代码访问,但 HTTP 请求无法访问。
2) 使用 SHA-256 散列密码是否安全
不应该直接使用 SHA-* 和 MD5 来散列密码,因为它们速度太快,因此很容易被暴力破解。相反,应该使用像 BCrypt 这样的慢函数,PBKDF2 or SCrypt,它们提供了成本因素并自动添加安全盐。
PHP 报价 a password API with two functions password_hash() and 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。
所以我有 php 代码将密码的散列版本保存到名为 passwords.txt 的文件中。目前,任何知道文件目录 (www.example.com/datacache/passwords.txt) 的人都可以访问它。这是不正确的做法吗?我以为我按照指南正确地处理了这封信的密码,但这似乎很不安全。想法?建议?
谢谢!
理想情况下,您会将它们保存在安全的 SQL 数据库中,或者类似的描述;哈希应该是第二道防线。
因此,如果您的数据库数据遭到破坏并且黑客掌握了它,他们将无法登录到每个人的帐户。
通常任何类型的哈希的过程是,一旦它被带出,它将是最安全的,然后随着时间的推移,随着人们的收集和计算机能力的增强,哈希逐渐将 "broken" 通常通过彩虹表的集合,最终会得到一个网站,例如 THIS,这就是 Md5 发生的情况。
如果您要将它们存储在 .txt 文件中,您可以在已经完成的基础上做的最低限度是确保您对哈希密码进行 SALT。 对散列密码进行加盐会降低其被破解的机会。请参阅下面的链接,了解如何对哈希进行加盐处理。
Great video by Computerphile on YouTube about the topic
其实这里有两个问题:
1) 可以将哈希存储在文件中吗
将密码保存在文件中并不比将其存储在数据库中好或坏。文件的要点是,它应该存储在 WWW 根目录之外。大多数供应商提供私有目录,可通过代码访问,但 HTTP 请求无法访问。
2) 使用 SHA-256 散列密码是否安全
不应该直接使用 SHA-* 和 MD5 来散列密码,因为它们速度太快,因此很容易被暴力破解。相反,应该使用像 BCrypt 这样的慢函数,PBKDF2 or SCrypt,它们提供了成本因素并自动添加安全盐。
PHP 报价 a password API with two functions password_hash() and 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。