プログラムによる htpasswd の構築
-
09-06-2019 - |
質問
プログラムで構築する方法はありますか htpasswd OS 固有の機能に依存せずにファイルを保存できます (つまり、 exec()
, passthru()
)?
解決
.httpasswd ファイルは、指定されたハッシュ関数に応じた特定の形式の単なるテキスト ファイルです。MD5 を使用している場合は次のようになります。
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
これは、ログイン、コロン、,$apr1$、ソルト、および Base64 としてエンコードされた 1000 回の md5 です。SHA1 を選択すると、次のようになります。
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
これは、ログイン、コロン、文字列 {SHA}、および Base64 でエンコードされた SHA1 ハッシュです。
言語に MD5 または SHA1 と Base64 が実装されている場合は、次のようにファイルを作成できます。
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
形式に関する詳細は次のとおりです。
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
他のヒント
トラック htpasswd に代わる Python が同梱されているので、お好みの言語に移植できると思います。 htpasswd.py.
PHP Web サイトに記載されているところによると、次のメソッドで crypt() を使用できます。
<?php
// Set the password & username
$username = 'user';
$password = 'mypassword';
// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);
?>
この例の一部は次のとおりです。 http://ca3.php.net/crypt
もちろん、これにより既存のファイル全体が上書きされるため、何らかの連結を行う必要があります。
これがうまくいくかどうかは 100% 確信はありませんが、かなり確信しています。
所属していません StackOverflow