サンプル・プログラムの実行例

サンプル・プログラム
ipassword2.php | サンプル・プログラム本体。 |
ipassword2js.html | JavaScript版のサンプル・プログラム。 |
サンプル・プログラムの流れ

サンプル・プログラムの解説
0157: /**
0158: * 母音を除く
0159: * @param string $str文字列
0160: * @return string変換後文字列
0161: */
0162: function delVowel($str) {
0163: $pat = "/[AIUEO]+/i";
0164: return preg_replace($pat, '', $str);
0165: }
0167: /**
0168: * 任意の位置に数字(・記号)を挿入する
0169: * @param string $str元になる文字列
0170: * @param int $num挿入する数字(・記号)の数(1~3)
0171: * @oaram bool $flag TRUE:記号を含める/FALSE:記号を含めない
0172: * @return string挿入語文字列/FALSE:$numが範囲外
0173: */
0174: function insString($str, $num, $flag) {
0175: static $tbl1 = '0123456789';
0176: static $tbl2 = '0123456789+-*/=$';
0177:
0178: if ($num < 1 || $num > 3) return FALSE;
0179:
0180: make_seed();
0181: //元の文字列を分割する
0182: $ln = strlen($str);
0183: $n = mt_rand(0, $ln);
0184: $s1 = substr($str, 0, $n);
0185: $s2 = substr($str, $n, $ln - $n);
0186:
0187: //挿入する数字(・記号)を生成
0188: $tbl = $flag ? $tbl2 : $tbl1;
0189: $ln = strlen($tbl);
0190: $s3 = '';
0191: for ($i = 0; $i < $num; $i++) {
0192: $n = mt_rand(0, $ln - 1);
0193: $s3 .= substr($tbl, $n, 1);
0194: }
0195:
0196: return $s1 . $s3 . $s2;
0197: }

ユーザー関数 insString では、まず、乱数を発生する関数 mt_rand を用いて分割する位置を求める。挿入する数字(・記号)は、あらかじめテーブル変数 $tbl1(または $tbl2)に用意し、乱数を使ってこのテーブルから引き出すようにしている。
セキュリティ上の注意点

配布ZIPファイルに含まれている password2js.html は、このPHPプログラムをJavaScriptに移植したものである。ネットワーク処理はなく、作成されたパスワードが平文で外に漏れるようなこともない。
サンプル・プログラム (JavaScript版)
参考サイト
- PHPでパスワードを生成:ぱふぅ家のホームページ
- 強いパスワードをつくる:ぱふぅ家のホームページ
- PHPセキュリティ対策:パスワードとcrypt関数:ぱふぅ家のホームページ
- RoboFormで複数のID・パスワードを一元管理:ぱふぅ家のホームページ
- 暗証番号を考える:ぱふぅ家のホームページ
そこで今回は、キーワード(ローマ字)から覚えやすいパスワードを生成するプログラムを作ることにする。
(2020年5月4日)PHP8対応,リファラチェック追加