SQLの窓

2009年09月02日


PHP : 暗号化と複合( libmcrypt )

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の最新記事】
posted by lightbox at 2009-09-02 23:24 | PHP | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり