2010-12-02 6 views
4

私たちのdovecotと電子メールサーバーは、SHA1ダイジェストを使ってユーザーを認証します。多くのユーザーがいて、すべてのパスワードを再作成する必要がないため、現在のダイジェストを実際に変更することはできません。bashやpythonなどのLinuxコマンドラインツールを使用してdovecot SHA1ダイジェストを作成

ダイジェストを作成してユーザのためにデータベースに入れやすくなりました。最終的には自分自身で変更できるようにWebインターフェイスを作成します。

は現在、我々は、Linuxのコマンドを使用してダイジェストを作成します。

dovecotpw -s SHA1 

我々はdovecotpwは(少なくともない期待や似たような使用せずに)スクリプト可能ではないので、切り替えたいです。しかし、私が試したすべてのもの(sha1sum、mysqlのsha1、pythonのhashlib.sha1)は、dovecotpwコマンドとはまったく異なるものを生成します。

は、以下の単語のためのさまざまなコマンドからの出力です:パスワード

dovecotpw -> W6ph5Mm5Pz8GgiULbPgzG37mj9g= 
sha1sum -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 
python hashlib.sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 
mysql sha1() -> 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 

だから、それはdovecotのように見える違うことをやって一つです。残念ながら、それは私が作成するのに必要なものです。

どのように私はスクリプト可能なコマンドからdovecot sha1を得ることができますか?

ありがとうございました。

答えて

7

バイナリダイジェストをbase64でエンコードして、その形式にする必要があります。

>>> import hashlib 
>>> import base64 

>>> p = hashlib.sha1('password') 
>>> base64.b64encode(p.digest()) 
'W6ph5Mm5Pz8GgiULbPgzG37mj9g=' 

EDIT:あなたはターミナル/ bashスクリプトからこれを行うことを好むだろう場合はところで、あなたはまた、

$ echo -n 'password' | openssl sha1 -binary | base64  
W6ph5Mm5Pz8GgiULbPgzG37mj9g= 

を行うことができ、あなたはdovecotpwを伝えることができるのhexdigestを与えていませんそれ以上のハッシュを持つハッシュは、すべての16進数[0-9a-f]ではありません。 = [A-Za-z0-9 + /]という文字を使用すると、ハッシュのbase64変換が示唆されます。

1

dovecotpwの出力はbase64でエンコードされています。