Perlでパスワード文字列生成にString::Randomを使ってみる
パスワードの再発行ルーチンとか、作っているのですけれども、例えば'9'と'Q'は聞き間違えるからとかいう理由で、パスワードの文字列に使いたくないっていう用件があって、そうすると、パスワードの文字列を限定して生成するっていうことになるのだけれども、これをこんな感じで作っていましたが。
#!/usr/bin/perl
use strict;
use warnings;
use Digest::SHA1;
my $salt = '3gatsu6nichihatokyodeoffkaida';
my $new_password = _make_password();
my $ctx = Digest::SHA1->new;
$ctx->add( $salt.$new_password );
my $password_digest = $ctx->hexdigest;
print "NewPASSWORD: $new_password\n";
print "salted_SHA1: $password_digest\n";
exit;
# パスワード生成
sub _make_password {
my @character
= ( 'A','C','D','F','H','K','L',
'P','R','T','U','X','Y','4','7', );
my $str = q();
my $length = @character;
for (my $i = 0; $i < 8; $i++ ) {
my $x = int(rand $length);
$str .= $character[$x];
}
return $str;
}
__END__
モジュールでString::Random使えば簡単にできることに最近気づいた!
#!/usr/bin/perl
use strict;
use warnings;
use Digest::SHA1;
use String::Random;
my $salt = '3gatsu6nichihatokyodeoffkaida';
my $new_password = _make_password();
my $ctx = Digest::SHA1->new;
$ctx->add( $salt.$new_password );
my $password_digest = $ctx->hexdigest;
print "NewPASSWORD: $new_password\n";
print "salted_SHA1: $password_digest\n";
exit;
# パスワード生成
sub _make_password {
my $sr = String::Random->new;
$sr->{A}
= [ 'A','C','D','F','H','K','L',
'P','R','T','U','X','Y','4','7', ];
return $sr->randpattern('AAAAAAAA');
}
__END__
String::RandomはCPANからインストール。
あんまりプログラムの長さは変わらんけれども、パスワードのバリエーションがいろいろできますよね。
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/19018/47713489
この記事へのトラックバック一覧です: Perlでパスワード文字列生成にString::Randomを使ってみる:


![: SANYO NEW eneloop 充電式ニッケル水素電池(単3形2個パック) [HR-3UTGA-2BP]](http://ecx.images-amazon.com/images/I/51V83UYI5kL._SL75_.jpg)


![: デジモンアドベンチャー ぼくらのウォーゲーム!/デジモンアドベンチャー【劇場版】 [DVD]](http://ecx.images-amazon.com/images/I/617JZ13THTL._SL75_.jpg)

















![: サマーウォーズ [Blu-ray]](http://ecx.images-amazon.com/images/I/51ZDAy7c8KL._SL75_.jpg)
![: サマーウォーズ [DVD]](http://ecx.images-amazon.com/images/I/419nVKBEIkL._SL75_.jpg)



































