在.htpasswd中加盐?
-
09-10-2019 - |
题
是否可以在.hpasswd文件中的密码中添加盐?我认为不是因为服务器需要每个用户的盐以验证密码,我想不出它将如何获得密码,但是如果要获得列表,它将很脆弱。有解决方案吗?
非常感谢您的帮助,本
解决方案
默认情况下,htpasswd使用标准 地下室 函数和密码已经腌制 - 在此示例中请注意,两个用户都具有相同的密码,但哈希是不同的:
simon@diablo:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:NWVM/LCCXQ64E simon2:2i.lbzsrquln6
(注意: -b
通常会劝阻标志,因为其他用户可以看到您的命令行参数,因此密码)
哈希的前两个字符是盐。密码通过致电验证 crypt()
再次。输入错误的密码会产生与哈希密码不相等的字符串:
>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'
而正确的密码会产生预期的哈希:
>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'
htpasswd -m
使用基于MD5的不同算法并使用更长的盐:
simon@diablo:~$ htpasswd -m -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ cat htpasswd simon:$ apr1 $ mfvnbvmg $ iihihoah9vcimg5g.8eva/
在这里,盐是第二和第三个角色 $
.
htpasswd -s
存储一个没有盐的sha-1摘要;这似乎是为了与Netscape/LDIF兼容:
simon@diablo:~$ htpasswd -s -b -c htpasswd simon abcd Adding password for user simon simon@diablo:~$ htpasswd -s -b htpasswd simon2 abcd Adding password for user simon2 simon@diablo:~$ cat htpasswd simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
这些很容易被逆转 - 转换为十六进制摘要:
>>> "".join("%02x" % ord(c)
... for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'
然后使用一个 在线哈希数据库.
不隶属于 StackOverflow