【追記】
暗号化及び復号化させる処理は以下の通りになっています。
php
1 static function new_digest ($token) { 2 $key = 'sfajeowif239jkljifw7'; 3 4 /* モジュールをオープンし、IV を作成 */ 5 $td = mcrypt_module_open('des', '', 'ecb', ''); 6 $key = substr($key, 0, mcrypt_enc_get_key_size($td)); 7 $iv_size = mcrypt_enc_get_iv_size($td); 8 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 9 /* 暗号化ハンドルを初期化 */ 10 if (mcrypt_generic_init($td, $key, $iv) != -1) { 11 12 /* データを暗号化 */ 13 $digest = mcrypt_generic($td, $token); 14 mcrypt_generic_deinit($td); 15 16 /* 後始末 */ 17 mcrypt_generic_deinit($td); 18 mcrypt_module_close($td); 19 return $digest; 20 } 21 } 22 23
php
1 static function restore_digest ($digest) { 2 $key = 'sfajeowif239jkljifw7'; 3 4 /* モジュールをオープンし、IV を作成 */ 5 $td = mcrypt_module_open('des', '', 'ecb', ''); 6 $key = substr($key, 0, mcrypt_enc_get_key_size($td)); 7 $iv_size = mcrypt_enc_get_iv_size($td); 8 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 9 /* 暗号化ハンドルを初期化 */ 10 if (mcrypt_generic_init($td, $key, $iv) != -1) { 11 12 13 /* 復号のため、バッファを再度初期化 */ 14 mcrypt_generic_init($td, $key, $iv); 15 $token = mdecrypt_generic($td, $digest); 16 17 /* 後始末 */ 18 mcrypt_generic_deinit($td); 19 mcrypt_module_close($td); 20 return $token; 21 } 22 }
【質問】
上記Mcryptで暗号化した文字列をMysqlのDBに格納すると、値が変わってしまいます。
そもそも暗号化した段階で、その値をそのままvar_dumpで確認すると以下のような文字化けした値になります。
string(40) "��4AwbAX��_;�5 �XZ�jgs��/�y:���Xp�U"
さらにこの値をDBに格納(カラムのデータ型はtinytextにしています)すると、":"とか"z"とかよく分からない凄く短い文字列になります。
この凄く短い文字列をDBから取り出して、復号化しても元の値と一致しません。
しかしながら、前者の文字化けしたものをDBに格納せずにそのまま復号化すると、元の値と一致します。
やりたい事としては、Mcryptで暗号化した値をDBに格納し、それを取り出して復号化して元の値と一致しているかどうか判定する事です。
①そもそも暗号化直後にvar_dumpした段階で文字化けしているのが問題なのでしょうか?
②それは関係なく、DBに格納した際に、凄く短い値に変わってしまうのが問題なのでしょうか?
mysqlの文字コードなどの問題なのでしょうか??
ご教示頂けると大変助かります。
回答1件
あなたの回答
tips
プレビュー