VB.NET でやるのも少し面倒そうだったので。バッチ処理でパスワードがバレバレになるのを防ぐ為に、まずは暗号化のテストです。途中の暗号化された文字列をbase64 でエンコードして取り出して使用します。 ( こんな感じ : YjAbG+kJK/Lf4DL+0vlStkAk0cKP8+VZBZ6kIQ== )
<? // phpinfo() で確認できたアルゴリズム // cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 // saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish // enigma rc2 tripledes // php_mcrypt // 暗号モジュールをオープンします // マニュアルのディレクトリ指定は動作しませんでした // おそらく、libmcrypt.dll は、php と同じ場所で動作するようです // php 4.4.4 では全て同じディレクトリに入れて動きました。 $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); // mcrypt_enc_get_iv_size($td) で取得できる長さの文字列 $iv = "12345678123456781234567812345678"; $ks = mcrypt_enc_get_key_size($td); // キーを作成します $key = substr(md5('とても大事なキーです'), 0, $ks); // 暗号化処理を初期化します mcrypt_generic_init($td, $key, $iv); // データを暗号化します $encrypted = mcrypt_generic($td, 'とてもとても大事なデータです'); // 暗号化ハンドラを終了します mcrypt_generic_deinit($td); // 復号用の暗号モジュールを初期化します $iv = "12345678123456781234567812345678"; mcrypt_generic_init($td, $key, $iv); // 暗号化された文字列を復号します $decrypted = mdecrypt_generic($td, $encrypted); // 復号ハンドルを終了し、モジュールを閉じます mcrypt_generic_deinit($td); mcrypt_module_close($td); // 文字列を表示します echo trim($decrypted) . "\n"; ?>
プログラムではそれを複合して元に戻して使おうというわけです。$iv は、モジュールを初期化する文字列でなんでもいいみたいなので、PHP マニュアルのサンプルで使用されていた関数を使用せずに適当な文字列を使用しています。しかし、この文字列と秘密のキーと二つ無いと復号はできません。 動作環境は、けっこう適当でバグ持ちのようで、WEB で古い記事を見ると前からそんな感じみたいです。Windows モジュールってけっこうこういうのは多いみたいですね php5 でテストした後、php4.4.4 でもテストしています。これは、Bambalam PHP EXE Compiler を使って秘密のキーを隠蔽しようと思ってるからなんですが、テストはこれからです
タグ:PHP
|
【PHPの最新記事】
- ロリポップのモジュール版 PHP でエラーを出力する方法
- PHP : unset によるオブジェクトのプロパティのと配列の要素の削除
- レンタルサーバで PHP のバージョンを 5.4 から 5.6 に変更する時の注意事項
- 【3大手法】 PHP で変数を埋め込んだ画面定義を外部ファイルにして、ループ内で展開する
- PHP で pathinfo と mime 情報やその他を合体した、get_finfo 関数を使って、opendir からファイル一覧を出力
- Windows で、MySQL を使っているので phpMyAdmin で参照しようとして、AN HTTPD だと setup が動かなかったので Apache を入れようとしたらいろいろルールがあっ..
- PHP : ファイルのアップロード時のデータのダンプ( PHP 5.4.0 以降で利用可能な php://input での取得 / ASP / C# )
- PHP で問い合わせ画面のページリンクを常に5つ作成しておいて、jQuery でいらないリンクを非表示にする
- PHP : HTMLのinput要素のname属性に二次元配列を指定して getElementsByName と jQueryのinput[name='value']:eq(n) でアクセステスト
- PHP の簡易ログとしては file_put_contents が使われますが、表現方法をいろいろテストして行くと、PHP のバージョンを 5.4.0 以上にして json_encode を使いたくな..
- さくらのサーバーで hash_hmac のアルゴリズムで使えるもの
- Pear を使用してダウンロード時のみ zip 圧縮してブラウザにデータを送る( プログレスバーはでません )
- Windows 環境で Pear のインストール
- PHP : php-5.3.1 の日付関数の注意点
- begin で始まるテキストで添付されたファイル(uuencode)を元に戻す方法