• ベストアンサー

1000名分のBASIC認証のパスワードを一括生成する方法について

特定のユーザーにのみ公開するサイトをBASIC認証を使って作成しようと考えております。 該当のユーザーは1000名おり、IDは会員コードを、パスワードは生年月日を元に生成する予定です。 平文のパスワードを一件ずつ暗号化するサイトは存じておりますが、件数が多いためかなり時間がかかります。 テキストファイルにある複数の会員コードとパスワードをもとに、basic認証のパスワードファイル(暗号化したパスワードを含む.htpasswd)を作成する方法をご存知の方がいらっしゃいましたら教えていただけますでしょうか。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

むかし、かけ出しのころ実験的に制作したもののアレンジです。 以前は時間関数を使ってcryptしたら時間差が少なすぎて種が均一化してしまい大失敗でした。おかげで、手入力する羽目になった嫌な思い出のプログラムです。 今回、乱数を使って種を作ってますので問題ないと思います。 短いプログラムなので、多分問題ないと思いますが、バグがあっても自助努力で乗り切って、いろいろいじって使ってみてください。  -------------------------------------------------------- my %DT; ## 1000人分のアカウントIDとPWをハッシュで格納 ID->キー PW->値 ## 乱数の初期化 srand(); ## 乱数の種生成用ベースデータ my @SALTSET = ('a'..'z','A'..'Z','0'..'9','.','/'); my $sFN = '.htaccess'; ## 生成された管理者とユーザのアカウントを各々の権限で仕切られた場所に格納 open(OUT01,$sFN); foreach $Key (keys %DT){ ## ハッシュからデータ取り出し my $ACC = $Key; my $PWW = $DT{$Key}; ## 各ユーザアカウントの種(シード)生成 my $A1 = int(rand() * 1000); my $A2 = int(rand() * 1000); my $NSALT = $SALTSET[$A1 % 64] . $SALTSET[$A2 % 64]; ## コード化パスワード生成 my $PWD = crypt($PWW,$NSALT); ## ファイル書き出し print OUT01 "$ACC:$PWD\n"; } close(OUT01);

その他の回答 (2)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

多重投稿すいません。 前のスクリプトで$sFNの代入をパスワードファイル名にしておいてください。 「my $sFN = '.htpasswd';」です。 あわてて、間違えましたです。はい。

  • maura
  • ベストアンサー率46% (48/104)
回答No.1

1.htpasswdのコマンドを調べる 2.perlでcryptを使用する方法を調べる 簡単に言うと  1、2、の情報を元にプログラムを作成すれば出来ます。 または、自分で作りたくない場合は、以下のサイトで配布している GCIを設置すると良いかもしれません。 http://www.psl.ne.jp/perl/auto_pass/

参考URL:
http://www.mys.azeri.com/manual/programs/htpasswd.html.ja.jis

関連するQ&A