PHPで覚えやすいパスワードを作る

(1/1)
PHPでパスワードを生成」で、英数字をランダムに組み合わせるパスワードを作った。これはパスワードの強度的には強いものの、いかにも覚えにくい。
そこで今回は、キーワード(ローマ字)から覚えやすいパスワードを生成するプログラムを作ることにする。

(2024年1月20日)PHP8.2対応,pahooInputData導入

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

PHPで覚えやすいパスワードを作る

サンプル・プログラム

圧縮ファイルの内容
ipassword2.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
ipassword2js.htmlJavaScript版のサンプル・プログラム。
password2.php 更新履歴
バージョン 更新日 内容
1.2.0 2024/01/20 PHP8.2対応,pahooInputData導入
1.1 2021/05/03 PHP8対応,リファラチェック追加
1.0 2012/01/28 初版

サンプル・プログラムの流れ

PHPで覚えやすいパスワードを作る

サンプル・プログラムの解説

 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: }

フローに示したように、次の2段階で覚えやすいパスワードを作る。
  1. 入力された文字列(ローマ字)から母音を除く。(delVowel 関数)
  2. 1の文字列を適当に2分割し、数字・記号を挿入する。(insString 関数)
ユーザー関数 delVowel では、正規表現による置換関数  preg_replace  を用いて母音を取り除くようにしている。

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

セキュリティ上の注意点

このプログラムでは、元の文字列や作成されたパスワードがネットワーク上を平文で行き来するので、盗み見できてしまう。実際に使うパスワードは、作成された文字列を更に加工してほしい。

配布ZIPファイルに含まれている password2js.html は、このPHPプログラムをJavaScriptに移植したものである。ネットワーク処理はなく、作成されたパスワードが平文で外に漏れるようなこともない。

サンプル・プログラム (JavaScript版)

参考サイト

(この項おわり)
header