繰り返し; while 文

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
FC2> モビット