我们的鸽舍和电子邮件服务器使用SHA1摘要对用户进行身份验证.我们无法真正更改当前摘要,因为我们有这么多用户,并且不希望让他们重新创建所有密码.
我们想要一种更简单的方法来创建一个摘要,以便为我们的用户输入数据库(最终创建一个Web界面,以便他们自己更改).
目前,我们使用linux命令创建摘要:
dovecotpw -s SHA1
我们想切换,因为dovecotpw不是可编写脚本的(至少不是没有使用expect或类似的东西).但是,我尝试过的所有东西(sha1sum,mysql的sha1,python的hashlib.sha1)都会产生与dovecotpw命令截然不同的东西.
下面是单词:password的各种命令的输出
dovecotpw -> W6ph5Mm5Pz8GgiULbPgzG37mj9g=
sha1sum -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
python hashlib.sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
mysql sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
所以看起来dovecot是以不同方式做事的人.不幸的是,这是我需要它创建的那个.
任何想法是如何从脚本命令获得dovecot sha1?
谢谢.
解决方法:
您需要对二进制摘要进行base64编码以使其符合其格式.
>>> import hashlib
>>> import base64
>>> p = hashlib.sha1('password')
>>> base64.b64encode(p.digest())
'W6ph5Mm5Pz8GgiULbPgzG37mj9g='
编辑:顺便说一句,如果您更喜欢从终端/ bash脚本执行此操作,您可以这样做
$echo -n 'password' | openssl sha1 -binary | base64
W6ph5Mm5Pz8GgiULbPgzG37mj9g=
另外,你可以告诉dovecotpw不再给出哈希的六进制,因为它有更多的字符不是全部十六进制[0-9a-f].使用带有=结尾的字符[A-Za-z0-9 /]表明它是哈希的base64转换.