我试图了解Linux如何在etc / shadow文件上加密我们的密码,所以我没有新的虚拟“测试”用户进行一些测试:
用户: newuser
密码: usrpw123
生成盐: Ii4CGbr7
所以操作系统在etc / shadow文件上使用SHA512加密系统($ 6 $)使我成为以下行: newuser:$ 6 $ Ii4CGbr7 $ IOua8 / oPV79Yp.BwzpxlSHjmCvRfTomZ.bhEvjZV2x5qhrvk82lZVrEtWQQej2pOWMdN7hvKwNgvCXKFQm5CB /:15069:0: 99999:7 :::
现在,我从python中获取SHA512模块并尝试:
import hashlib
m = hashlib.sha512()
m.update('Ii4CGbr7'+'usrpw123')
print m.hexdigest
这给了我以下哈希作为结果: 的 c73156daca3e31125ce457f1343201cc8a26400b2974440af2cc72687922b48b6631d21c186796ea2756ad987a996d2b261fe9ff3af4cc81e14c3029eac5df55
正如你所看到的,它与/ etc / shadow文件中的另一个不同,我不知道为什么我使用相同的salt +密码来生成哈希。
有人可以帮我一把,或多或少地解释一下为什么会这样吗?
另外,为什么/ etc / shadow文件生成带有一些点(。)的散列?
感谢
答案 0 :(得分:6)
/ etc / shadow中的字段不是按照您的想法构建或解释的。您需要阅读man page以获取详细信息,但最明显的区别是它对salt和hash使用了不常见的base64编码。
答案 1 :(得分:6)
有一种算法可以生成/ etc / shadow中的密码哈希值。
请参阅此文档以获得解释:
http://www.akkadia.org/drepper/SHA-crypt.txt
这里有一个在python中的实现:
http://packages.python.org/passlib/lib/passlib.hash.sha512_crypt.html
答案 2 :(得分:2)
我陷入了同样的陷阱,因为我读到的所有内容都让我相信你可以像写下来一样检索结果。
我可以使用crypt.crypt()
使用salt和密码来确定密码import crypt
crypt.crypt(password, salt)
盐:$ 6 $ Ii4CGbr7
密码:usrpw123
并不完全使用hashlib库但它可以工作。