我们的 dovecot 和电子邮件服务器使用 SHA1 摘要对用户进行身份验证。我们无法真正更改当前摘要,因为我们有太多用户并且不想让他们重新创建所有密码。
我们想要一种更简单的方法来为我们的用户创建摘要并放入数据库(并最终创建一个网络界面,以便他们可以自己更改)。
目前,我们使用 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 转换。
关于python - 使用 bash 或 python 或其他一些 linux 命令行工具创建一个 dovecot SHA1 摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4339736/