• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パスワード自動生成スクリプトについて)

パスワード自動生成スクリプトについて

このQ&Aのポイント
  • solaris10(x86)のOSでユーザーパスワードを自動変更するためのスクリプトを作成しています。
  • パスワード制限を満たす文字列を自動生成し、リストファイル(list.lst)を元にExpectモジュールを使って、ユーザーパスワードを自動変更後に結果をファイル(result.log)へ出力します。
  • 記号を含むパスワードを自動生成するにはどうしたらよいか、どなたかアドバイス頂けませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

このプログラムがしているのは、パスワードとして利用可能な文字を@wordsに登録し、その中からランダムに文字を選ぶということですよね?これだと、記号が選ばれる可能性はあっても、必ず記号が選ばれるかは保証されません。なぜなら、期待する条件を満たすかをチェックするコードは一切無いからです。 つまり、 for (my $var = 0; $var < $lng; $var++) { my $words_num = @words; $ps = $ps . "@words[rand($words_num)]"; } という、パスワードを生成しているコードを下記のようなコードに書き換える必要があるでしょう。 while (1) { for (my $var = 0; $var < $lng; $var++) { my $words_num = @words; $ps = $ps . "@words[rand($words_num)]"; } 条件を満たすかチェックし、満たした場合のみbreak, 満たさない場合は$psを''でクリア。 } $num などの条件を一切無視すると、チェックするコードはこんな感じですね。 if ($ps =~ /[0-9]/ && $ps =~ /[a-z]/ && $ps =~ /[A-Z]/ && $ps =~ /[#$%()-=略]/) { break; } else { $ps =''; }

noname#159383
質問者

お礼

ご回答ありがとうございます。 無限ループ処置のなかに判定部分を入れて、 制限を満たさない場合は、ループを繰り返すようにするんですね。 大変勉強になりました。 ベストアンサーとさせて頂きます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

>@words[ rand($words_num) ] 結局のところ、上記のように、@wordsのうちの1文字を単にランダムで選んでるだけなので、「hogehoge」みたいのが生成される可能性はあるかと。 ・アルファベット小文字をn文字(n=1~5) ・アルファベット大文字をm文字(m=1~6-n) ・数字をl文字(l=1~7-n-m) ・記号をk文字(k=8-n-m-l) ――と選んで、それの順列の一つを選ぶみたいな感じにするとか。

参考URL:
http://ideone.com/abdnd

関連するQ&A