Edited at

ダイジェスト認証用ファイルをPythonで書き換える


ダイジェスト認証用ファイルの作成

ダイジェスト認証用ファイルは次のコマンドで作成できる。

$ sudo htdigest -c [ファイル名] '[レルム名]' [ユーザ名]

例えば

ファイル名:.htdigest

レルム名(AuthName):RealmName

ユーザ名:Aoba

パスワード:zoizoizoi

とすると、次のようにすればダイジェスト認証用ファイルを作成できる。

$ sudo htdigest -c /var/www/html/.htdigest 'RealmName' Aoba

Adding password for Aoba in realm RealmName.
New password:zoizoizoi
Re-type new password:zoizoizoi

パスワードを変更したくなったときは上記のコマンドを再度行えばよいが、シェルスクリプトでやろうとするとパスワード入力がうまくできない。やろうと思えばやり方はあるらしいが、今回はPythonで書き換える。


ダイジェスト認証用ファイルの構成

.htdigestファイルの中身は次のような構成になっている。


.htdigest

# [ユーザ名]:[レルム名]:[MD5値]という構成になっている

Aoba:RealmName:ba31a07d0aa46ccc6c511602204e9c15

このうち[MD5値]は、文字列"[ユーザ名]:[レルム名]:[パスワード]"をMD5変換したものである。


新しいパスワードでダイジェスト認証用ファイルを再作成する

よって、新しいパスワードで.htdigestファイルを書き換えようと思ったら次のようにすればよい。

import hashlib

user = "Aoba"
realm = "RealmName"
password = "new_password"

# MD5値の算出
md5 = hashlib.md5("{}:{}:{}".format(user, realm, password).encode("utf-8")).hexdigest()

# .htdigestファイルに書き込む新しい文字列
htdigest = "{}:{}:{}\n".format(user, realm, md5)