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

使用bash或python或其他一些linux命令行工具创建一个dovecotsha1摘要,python,bash,sha1,Python,Bash,Sha1,我们的dovecot和电子邮件服务器使用SHA1摘要对用户进行身份验证。我们无法真正更改当前摘要,因为我们有这么多用户,不想让他们重新创建所有密码 我们希望有一种更简单的方法来创建摘要,并将其放入用户的数据库中(并最终创建一个web界面,以便用户可以自己更改) 目前,我们使用linux命令创建摘要: dovecotpw -s SHA1 我们想要切换,因为dovecotpw是不可编写脚本的(至少在不使用expect或类似工具的情况下是这样)。然而,我尝试过的所有方法(sha1sum、mysql的

我们的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 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不再给出哈希的hexdigest,因为它有更多的字符,而不是所有的十六进制[0-9a-f]。将字符[A-Za-z0-9+/]与=结尾一起使用表明这是哈希的base64转换

dovecotpw的输出是base64编码的