Ansible 的 user 模块中,对如何生成用户密码给了集中方法,其中一种是这样实现的
/etc/ansible ⌚ 13:36:09
$ python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$ugLvJs2HQIVNoXW0$F8sbBsLT/dcU/HVFVlHqNNSpxZwwpt2R4tP7cE/JvYKjQnPX137YzNaPGo6t/EwX3Ick17Gm7E7N2qD.N.A3h/
/etc/ansible ⌚ 13:36:13
$ python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$EZ5ZGsr7dlFrHzS0$5vNcNAtkUw41P8NCuHpp.Um5DHoNoH8mSbmTjc0fTgH95Gq4zDFpcsnLvd4T26Zx0gSLRdBxlzkNdMHC.kLub.
/etc/ansible ⌚ 13:36:17
$ python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$zem4hGz27MgX4k8X$Mn6n08MCPtvCzbJTmjYVnBX/JpU7dEUKK.o0F60UA5rsbBLLLXZZb2bWRrBazpCHY.ugEPw0bgiwwvsvgfyTK/
/etc/ansible ⌚ 13:38:25
$
我每次输入的密码都是 1234 ,但是生成的值是不同的,那如何验证这些不同的值是同一个密码呢
1
2i2Re2PLMaDnghL 2021-11-25 14:20:10 +08:00 1
这个密码存储从设计上避免了你说的这个漏洞。
|
2
yanqiyu 2021-11-25 15:43:04 +08:00 1
生成的值不一样是有随机加盐,不然别人拿到 hash 就可能能查表还原密码了
这类 hash 的规范就是 $<ID>$<SALT>$<PWD> 比如 $6$zem4hGz27MgX4k8X$Mn6n08MCPtvCzbJTmjYVnBX/JpU7dEUKK.o0F60UA5rsbBLLLXZZb2bWRrBazpCHY.ugEPw0bgiwwvsvgfyTK/ 对应的就是 id=6 对应 SHA-512 盐是 zem4hGz27MgX4k8X HASH=Mn6n08MCPtvCzbJTmjYVnBX/JpU7dEUKK.o0F60UA5rsbBLLLXZZb2bWRrBazpCHY.ugEPw0bgiwwvsvgfyTK/ 盐每次都不一样于是后面的 hash 就不一样了 怎么解析就是拿到密码,拿到盐,按照算法算 hash (怎么算要查规范,主要是密码和盐的拼接以及 hash 迭代次数等等),看输出的 hash 是不是等于最后一段 (我猜肯定有现成的轮子) |
3
3dwelcome 2021-11-25 15:51:26 +08:00 1
楼主的问题,就和 RSA 数据加密后,为什么每次加密的结果都是不一样的,是同一个道理。
说白了,这类算法,就是要“不一样”这个效果。 至于内部实现,就是楼上说的加盐或者随机 padding 。 |
4
eason1874 2021-11-25 15:52:07 +08:00
“如何验证这些不同的值是同一个密码呢”
这类密码哈希,要验证密码,不是再 hash 一次去对比,而是用配套的验证函数。要验证密码是否正确,你看文档找到对应的函数方法去调用就可以了 如果你是想做彩虹表,那别想了,随机哈希就是为了让彩虹表失效 |
5
bruce0hh 2021-11-25 16:57:18 +08:00
这种密码设计,盐是不是也要存储啊
|
6
gadfly3173 2021-11-25 17:08:36 +08:00
比如 jhash 的 pbkdf2 的实现就是
pbkdf2sha256:64000:18:24:n:yUnDokcNRbwILZllmUOItIyo9MnI00QW:6ZcPf+sfzyoygOU8h/GSoirF 算法:重复次数:hash 大小:盐大小:pepper:盐:hash 验证的时候就根据:拆分,然后重新计算一遍,比较是否符合 |
8
hxndg 2021-11-25 18:36:44 +08:00
目的就是为了 让你不能 “验证这些不同的值是同一个密码”
|