OS 固有の関数 (つまり, )に依存せずにhtpasswdファイルをプログラムで作成する方法はありますか?exec()
passthru()
3 に答える
.httpasswd ファイルは、指定されたハッシュ関数に応じて特定の形式を持つ単なるテキスト ファイルです。MD5 を使用している場合は、次のようになります。
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
これは、ログイン、コロン、$apr1$、salt、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
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%確信が持てませんが、かなり確信しています。
Tracには htpasswd の Python 代替が同梱されています。これは、選択した言語htpasswd.pyに移植できると確信しています。