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

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

谢谢.

解决方法:

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

上一篇:Windows Server 2008 R2 官方原版下载大全


下一篇:c# – SHA-1散列字节数组与文件流