[PHP-users 31653] PHP mcryptとjavascript間での暗号化/復号化について

Higuchi Atsushi rmitcs @ gmail.com
2007年 3月 9日 (金) 15:21:59 JST


mcrypt関数で暗号化したデータをjavascriptで復号化(またはその逆)したいのですが、うまくできず困っています。
テストで使用しているPHPのコードは以下のようなものです。

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH,
MCRYPT_MODE_CBC), MCRYPT_RAND);
$text = "123 456 789 0123"; // 暗号化するテキスト
$key = "key";
$encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_CBC, $iv);

$encoded = base64_encode($encrypted);
print $encoded."\n"; // 符号化済みのテキスト

// ここから復号化処理
$decoded = base64_decode($encoded);
$decrypted = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $decoded,
MCRYPT_MODE_CBC, $iv);
print str_replace("\0", "", $decrypted);

このプログラム内では暗号化/復号化は正常に動作しているので、PHP同士では問題ないようです。

javascriptは以下のページのサンプルを使わせてもらいました。
http://user1.matsumoto.ne.jp/~goma/js/blowfish.html

このページ内で、PHPによって暗号化、符号化されたデータ(上記の例の中の$encoded)を復号化すると、平文の最初の2つのスペースまでの部分が途切れてしまい、表示される結果は"789
0123"になってしまいます。スペースが含まれていない場合は結果は空になります。

逆に、javascriptで暗号化したものをPHPで復号化すると、今度は復号化されたテキストの先頭に"˜j_	á¯w123 456 789
0123"のような感じでゴミが付いてしまいます。
何か途中に他の処理が必要なのでしょうか?

-- 
Atsushi Higuchi


PHP-users メーリングリストの案内