last-modified: 2nd/June/'01;
since: 1st/June/2001;
if 文では、条件分岐が出来るようになりました。次に、繰り返しを実現しましょう。
ユーザ名に引き続き、パスワードも判定させます。成功するまでトライできるように作成してみましょう。
idpass.pl
>>
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: |
#!/usr/bin/perl
#上の行では、 Perl のパスを記述してください。
$login_id = "sugai";
$login_pass = "s59od3fN";
print "Please, enter your name; ";
chomp($name = <STDIN>);
if ($name eq $login_id) {
print "$name さん、ようそこ!\n";
print "パスワードを書いてください; ";
while (1) {
chomp($pass = <STDIN>);
if ($pass eq $login_pass) {
print "パスワードが確認されました。\n";
last; # while から抜け出し
} else {
print "もう一度パスワードを御願いします; ";
} # 「if 文」終了
} # 「while 文」終了
} else {
print "$name さんは、ユーザに一致しませんでした。\n";
}
|
10 行目から 18 行目が繰り返しを表す while
節です。
実行例>>
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: | $ chmod +x idpass.pl $ ./idpass.pl Please, enter your name; yamada yamada さんは、ユーザに一致しませんでした。 $ ./idpass.pl Please, enter your name; sugai sugai さん、ようそこ! パスワードを書いてください; ho9fg64a もう一度パスワードを御願いします; g21i7djA もう一度パスワードを御願いします; s59od3fN パスワードが確認されました。 $ |
パスワードを間違い続けると、無限に繰り返します。終了させる場合は、 Ctrl + d
です。
パスワード・システムとしてはおもちゃのようなモノですが、ちょっとした遊びには十分でしょう。
一般にパスワードは、「8文字以上、英数字、大文字小文字交じり、ランダム」の条件を守りましょう。一般に、パスワードクラックでは、「辞書」と呼ばれるデータベースを高速で参照して何度もアタックする事で破ります。
普通の英単語や、簡単な文字列は「辞書」にのっているので簡単に破られます。
ランダムな文字列は忘れやすいですが、心配ならば紙に書いて密封しておきましょう。何度か入力すれば憶えますので、その暁に焼却処分すれば良いでしょう。
パスワードはシステムのどこかに保存されていますので、流出する場合も考えられます。重要な場所では、その都度パスワードを新たにし、定期的に変更しましょう。
while
によるブロックの繰り返しと、 last
による繰り返しからの脱出を紹介しました。
次に、パスワードのトライを三回迄に限定するように修正してみましょう。
Copyright: SUGAI, Manabu. Since: 2001