【问题标题】:Matching Hashed + Salted Passwords匹配散列 + 加盐密码
【发布时间】:2015-04-27 18:41:33
【问题描述】:

我正在学习加密和安全性,但我对一个(可能很简单的)概念有点困惑。

我了解哈希和盐的大部分工作原理,但我不了解函数如何匹配密码。例如,这里是 passlib 文档的一部分:

>>> # import the hash algorithm
>>> from passlib.hash import sha256_crypt

>>> # generate new salt, and hash a password
>>> hash = sha256_crypt.encrypt("toomanysecrets")
>>> hash
'$5$rounds=80000$zvpXD3gCkrt7tw.1$QqeTSolNHEfgryc5oMgiq1o8qCEAcmye3FoMSuvgToC'

>>> # verifying the password
>>> sha256_crypt.verify("toomanysecrets", hash)
True
>>> sha256_crypt.verify("joshua", hash)
False

在第 4 行,它提到了生成新盐,但据我所知,盐永远不会与密码一起存储。

为什么我可以将经过哈希处理的密码作为字符串存储在数据库中,然后在不提供盐的情况下进行验证?

【问题讨论】:

    标签: python encryption hash sha256 conceptual


    【解决方案1】:

    the documentation:

    sha256-crypt 哈希字符串的格式为$5$rounds=rounds$salt$checksum

    盐(在您的情况下为'zvpXD3gCkrt7tw.1')存储在字符串本身中;这就是它不需要单独存储的原因。

    【讨论】:

    • 啊,谢谢。我浏览了文档,但一定错过了。