代码之家  ›  专栏  ›  技术社区  ›  Schwaitz

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

  •  0
  • Schwaitz  · 技术社区  · 10 年前

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

    非常感谢。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Scott Arciszewski    10 年前

    实际上这里有两个问题:

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

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

    2) 使用SHA-256散列密码安全吗

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

    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 .

        2
  •  0
  •   Tommy    10 年前

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

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

    通常,任何类型的哈希的过程都是,一旦它被推出,它将是最安全的,然后随着时间的推移,随着人们的聚集和计算机能力的增强,哈希将被“打破”,通常通过Rainbow表的集合,并最终形成一个网站,例如 THIS 这就是Md5的情况。

    如果您要将它们存储在.txt文件中,那么在您已经完成的工作的基础上,您可以做的最起码的事情就是确保保存哈希密码。 对散列密码进行Salting可降低其被破解的几率。请参阅下面的链接,了解您将如何对哈希进行Salting。

    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

    推荐文章