※2019/06/10追記
当記事に記載のページは閉鎖済みです。
変わりに以下のページで4桁までの逆変換に対応したページについて記載しています。
MD5を逆変換するサイトを作った
md5の変換/逆変換を行うツールを作成しました。前回の記事で書いたCakePHP3プロジェクトのことになります。
MD5の変換、逆変換ツール
https://md5.imo-tikuwa.work/
ドメインの末尾が当サイトと異なりますが私が保有しているドメインです。PHPやhttpdのバージョンの兼ね合いで当サイトと同じサーバーへの構築が難しかったためひとまず別ドメインの環境で稼動しています。
以下の2通りの使い方ができます。
- md5ハッシュ化したいプレーンテキストを入力しmd5ハッシュ文字列に変換する
- md5ハッシュ化された文字列を入力し、ハッシュ化前の文字列に逆変換する
md5は不可逆なハッシュ関数のため入力したハッシュ文字列を逆変換しているわけでありません。システム内で辞書テーブルを保持していて、逆変換の際はプレーンテキストとmd5ハッシュテキストの組み合わせを参照する仕組みとなっています。
辞書テーブルは毎分100件ずつ4桁~8桁のランダム文字列をmd5ハッシュ化し保存していくバッチ処理が稼動しています。
以下作成した際のメモになります。
1.CakePHP3で複数件を一括でINSERTするクエリを生成する
参考:[PHP]CakePHP 3.x でも、複数行INSERTできるよ!
$this->Md5 = TableRegistry::get('Md5'); $query = $this->Md5->query(); $query->insert(['md5_key', 'md5_encrypted_key', 'created']); $current = 0; $created = new Time(date('Y-m-d H:i:s')); while ($current < $this->limit_num) { $md5_key = $this->makeRandStr(mt_rand(4,8)); $entity = $this->Md5->findByMd5Key($md5_key); if (!empty($entity)) { continue; } $md5_encrypted_key = md5($md5_key); $query->values(['md5_key' => $md5_key, 'md5_encrypted_key' => $md5_encrypted_key, 'created' => $created]); $current++; } $query->execute();
$queryオブジェクトを作成しvaluesメソッドで都度レコード情報を追加していくことでINSERT INTO (a, b) VALUES (“1”, “2”), (“11”, “22”)といったSQLになりました。データの件数が増えていくとINSERT1回行うのに時間が掛かるようになってしまうため件数が多いテーブルにレコードを追加する際に特に有効だと思います。
2.crontabに登録するCakePHP3のバッチスクリプトが多重起動しないようにする
* * * * * flock -n /tmp/[script_name].lock /var/www/[app_name]/bin/cake [script_name]
3.ロギングの時刻がUTCになる件
php.iniでAsia/Tokyoが指定されているにも関わらずCakePHP3のログファイルの時刻がUTCになっていたので原因を調べたところ、bootstrap.php内にタイムゾーンを設定する箇所を見つけました。
-date_default_timezone_set('UTC'); +date_default_timezone_set('Asia/Tokyo');
上記の設定を行うことでバッチ実行時のログファイル内の時刻がJSTになりました。