サンプル・プログラムの実行例
サンプル・プログラム
ipassword2.php | サンプル・プログラム本体。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
ipassword2js.html | JavaScript版のサンプル・プログラム。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.2.0 | 2024/01/20 | PHP8.2対応,pahooInputData導入 |
1.1 | 2021/05/03 | PHP8対応,リファラチェック追加 |
1.0 | 2012/01/28 | 初版 |
サンプル・プログラムの流れ
サンプル・プログラムの解説
161: /**
162: * 母音を除く
163: * @param string $str 文字列
164: * @return string 変換後文字列
165: */
166: function delVowel($str) {
167: $pat = "/[AIUEO]+/i";
168: return preg_replace($pat, '', $str);
169: }
171: /**
172: * 任意の位置に数字(・記号)を挿入する
173: * @param string $str 元になる文字列
174: * @param int $num 挿入する数字(・記号)の数(1~3)
175: * @oaram bool $flag TRUE:記号を含める/FALSE:記号を含めない
176: * @return string 挿入語文字列/FALSE:$numが範囲外
177: */
178: function insString($str, $num, $flag) {
179: static $tbl1 = '0123456789';
180: static $tbl2 = '0123456789+-*/=$';
181:
182: if ($num < 1 || $num > 3) return FALSE;
183:
184: sowSeeds();
185: //元の文字列を分割する
186: $ln = strlen($str);
187: $n = mt_rand(0, $ln);
188: $s1 = substr($str, 0, $n);
189: $s2 = substr($str, $n, $ln - $n);
190:
191: //挿入する数字(・記号)を生成
192: $tbl = $flag ? $tbl2 : $tbl1;
193: $ln = strlen($tbl);
194: $s3 = '';
195: for ($i = 0; $i < $num; $i++) {
196: $n = mt_rand(0, $ln - 1);
197: $s3 .= substr($tbl, $n, 1);
198: }
199:
200: return $s1 . $s3 . $s2;
201: }
ユーザー関数 insString では、まず、乱数を発生する関数 mt_rand を用いて分割する位置を求める。挿入する数字(・記号)は、あらかじめテーブル変数 $tbl1(または $tbl2)に用意し、乱数を使ってこのテーブルから引き出すようにしている。
セキュリティ上の注意点
配布ZIPファイルに含まれている password2js.html は、このPHPプログラムをJavaScriptに移植したものである。ネットワーク処理はなく、作成されたパスワードが平文で外に漏れるようなこともない。
サンプル・プログラム (JavaScript版)
参考サイト
- PHPでパスワードを生成:ぱふぅ家のホームページ
- 強いパスワードをつくる:ぱふぅ家のホームページ
- PHPセキュリティ対策:パスワードとcrypt関数:ぱふぅ家のホームページ
- RoboFormで複数のID・パスワードを一元管理:ぱふぅ家のホームページ
- 暗証番号を考える:ぱふぅ家のホームページ
そこで今回は、キーワード(ローマ字)から覚えやすいパスワードを生成するプログラムを作ることにする。
(2024年1月20日)PHP8.2対応,pahooInputData導入