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

时间:2010-12-02 20:53:33

标签: python bash sha1

我们的dovecot和电子邮件服务器使用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的?

感谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

dovecotpw的输出是base64编码的。