Python
Apache
Python3
Digest認証

ダイジェスト認証用ファイルを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)