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からインストール。
あんまりプログラムの長さは変わらんけれども、パスワードのバリエーションがいろいろできますよね。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3149
コメントする