python - 匹配哈希+加盐密码

标签 python encryption hash sha256 conceptual

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

我了解哈希和盐在很大程度上是如何工作的,但我不明白函数如何匹配密码。例如,以下是 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

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

为什么我可以将散列密码作为字符串存储在数据库中,并在以后验证它而不需要提供盐?

最佳答案

the documentation :

An sha256-crypt hash string has the format $5$rounds=rounds$salt$checksum

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

关于python - 匹配哈希+加盐密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903560/

相关文章:

python - 按条件删除行并填充 pandas 数据框中的新列

python - 如何将 Dataframe 转换为 Series?

java - 在for循环中比较两个数组的元素(java)?

Android DES 解密 badpaddingException : pad block corrupted

c++ - 为什么 C++ POD 结构没有默认散列?

python - Python OpenCV中calcOpticalFlowFarneback函数中输出值的范围

python - 当语法从另一个 Python 脚本运行时,在 SPSS 中保存 Python 变量

java - 尝试在 GCM 模式下解密消息时出现 AEADBadTagException

Java - 生成随机盐不是随机的

hash - 为什么布隆过滤器需要多个哈希函数?