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

标签 python bash sha1

我们的 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/

相关文章:

python - 如何在 Spark DataFrame 中添加常量列?

bash - bash 脚本的 Apple 安装程序命令帮助

go - UUID 的 Sha1 十六进制 - 用作访问 token

java - 相当于 Java MessageDigest 的 Shell 脚本

bash - 如果未命名参数在命名参数 ("./foo unnamed -n named"之前,getopts 将忽略所有参数)

macos - 获取文件的 md5/sha1 校验和

python - 获取每个主题最可能出现的单词

python - BeautifulSoup - 抓取多个页面

python - 如何在argparse中将store_true和值存储在互斥组中?

regex - 使用 sed 搜索精确模式并换行打印