Apache の場合の基本認証(BASIC 認証)、.htaccess の仕組みで使うパスワードは Perl で生成できる。
以下のコードを実行するとユーザー名「guest」に対するパスワード「password」は、毎回違った暗号文字列が出力されるが、それでも Apache はきちんと処理する。
#!/usr/bin/perl
our $id = 'guest';
our $password = 'password';
our $password_file = '.htpasswd';
# Perl の crypt 関数に使える SALT の文字は a~z、A~Z、0~9、「.」と「/」
my @salt = ('a'..'z','A'..'Z','0'..'9','.','/');
#乱数初期化関数は srand
srand;
# SALT を作る。
my $seed1 = int(rand(64));
my $seed2 = int(rand(64));
my $salt = $salt[$seed1] . $salt[$seed2];
# crypt 関数の仕様は crypt(テキスト, SALT)
$crypt_password = crypt($password, $salt);
# .htpasswd ファイルに書き出す。
open(OUT, ">$password_file") || die;
print OUT "$id:$crypt_password\n";
close(OUT);
# 表示してみる。
print "$id:$crypt_password\n";
1つのパスワードに対する暗号化された文字列の種類は 4,096通りある。これは、アルファベット小文字 26 通り+アルファベット大文字 26 通り+数字 10 通り+記号 2 通り=64 通りで、SALT は 2文字で構成されるため、64×64 = 4,096 通り、ということからくる。
Apache の場合の基本認証(BASIC 認証)、.htaccess の仕組みで使うパスワードは Perl で生成できる。
以下のコードを実行するとユーザー名「guest」に対するパスワード「password」は、毎回違った暗号文字列が出力されるが、それでも Apache はきちんと処理する。
#!/usr/bin/perl
our $id = 'guest';
our $password = 'password';
our $password_file = '.htpasswd';
# Perl の crypt 関数に使える SALT の文字は a~z、A~Z、0~9、「.」と「/」
my @salt = ('a'..'z','A'..'Z','0'..'9','.','/');
#乱数初期化関数は srand
srand;
# SALT を作る。
my $seed1 = int(rand(64));
my $seed2 = int(rand(64));
my $salt = $salt[$seed1] . $salt[$seed2];
# crypt 関数の仕様は crypt(テキスト, SALT)
$crypt_password = crypt($password, $salt);
# .htpasswd ファイルに書き出す。
open(OUT, ">$password_file") || die;
print OUT "$id:$crypt_password\n";
close(OUT);
# 表示してみる。
print "$id:$crypt_password\n";
1つのパスワードに対する暗号化された文字列の種類は 4,096通りある。これは、アルファベット小文字 26 通り+アルファベット大文字 26 通り+数字 10 通り+記号 2 通り=64 通りで、SALT は 2文字で構成されるため、64×64 = 4,096 通り、ということからくる。