我试图了解 Linux 如何在 etc/shadow 文件上加密我们的密码,所以我没有新的虚拟“测试”用户来进行一些测试:
用户:新用户
密码:usrpw123
生成的盐: Ii4CGbr7
因此,操作系统使用 SHA512 加密系统($6$)在 etc/shadow 文件中添加了以下行: 99999:7:::
现在,我从 python 中获取 SHA512 模块并试试这个:
import hashlib
m = hashlib.sha512()
m.update('Ii4CGbr7'+'usrpw123')
print m.hexdigest
这给了我以下散列作为结果: c73156daca3e31125ce457f1343201cc8a26400b2974440af2cc72687922b48b6631d21c186796ea2756ad987a996d2b261fe9ff3af4cc81e14c3029eac5df55
如您所见,它与/etc/shadow 文件中的另一个不同,我不知道为什么我使用相同的 salt+password 来生成哈希。
谁能帮我解释一下为什么会这样?
另外,为什么/etc/shadow 文件会生成一个带有一些点 (.) 的散列?
谢谢
最佳答案
/etc/shadow 中的字段不是按照您认为的方式构建或解释的。您需要阅读 man page有关详细信息,但最明显的区别是它对 salt 和 hash 使用了不寻常的 base64 编码。
关于python - Python MD5、SHA512 (+salt) 加密的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549102/