M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2010年3月 3日 14:40

Perlでパスワード文字列生成にString::Randomを使ってみる

このエントリーをはてなブックマークに追加 mixiチェック

パスワードの再発行ルーチンとか、作っているのですけれども、例えば'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からインストール。

あんまりプログラムの長さは変わらんけれども、パスワードのバリエーションがいろいろできますよね。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3149

コメントする