使用bash、python或其他Linux命令行工具创建一个dovecot SHA1摘要

4
我们的鸽舍和电子邮件服务器使用SHA1摘要对用户进行身份验证。由于我们有很多用户,不想让他们重新创建所有密码,所以我们实际上无法更改当前的摘要。
我们希望有一种更简便的方法来为我们的用户创建摘要并将其放入数据库中(最终创建一个Web界面,使他们可以自行更改)。
目前,我们使用Linux命令来创建摘要:
dovecotpw -s SHA1

我们想要切换,因为dovecotpw不可脚本化(至少没有不使用expect或类似工具的情况下)。然而,我尝试过的所有方法(sha1sum,mysql的sha1,python的hashlib.sha1)都产生与dovecotpw命令非常不同的结果。

以下是单词“密码”的各种命令的输出:

dovecotpw -> W6ph5Mm5Pz8GgiULbPgzG37mj9g=
sha1sum -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
python hashlib.sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
mysql sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

看起来dovecot在做一些不同的事情。不幸的是,这正是我需要创建的。

有什么办法可以从可脚本化的命令中获取dovecot sha1吗?

谢谢。

2个回答

7

您需要对二进制摘要进行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转换。


1

dovecotpw 的输出是经过 base64 编码的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接