mcrypt 暗号化について
調べ中
/* データ */ $key = 'asdj;asdiojsadfasdfa;sdidfasndfain'; $plain_text = "DATA DATA DATA!" ; $encData = enc($plain_text, $key) ; var_dump( bin2hex( $encData ) ); var_dump( dec( $encData, $key ) ); function enc($data,$key){ /* モジュールをオープンし、IV を作成します */ $td = getMcryptModule(); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv_size = mcrypt_enc_get_iv_size($td); $iv = getIv($iv_size); mcrypt_generic_init($td, $key, $iv); /* データを暗号化します */ $c_t = mcrypt_generic($td, $data); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $c_t ; } function dec($data, $key){ /* モジュールをオープンし、IV を作成します */ $td = getMcryptModule(); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv_size = mcrypt_enc_get_iv_size($td); $iv = getIv($iv_size); mcrypt_generic_init($td, $key, $iv); /* データを暗号化します */ $p_t = mdecrypt_generic($td, $data); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $p_t ; } function getMcryptModule(){ //$td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); return $td ; } function getIv($iv_size){ return mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); }
結果が一緒にならない
CBCだと暗号化した値が毎回違うmcrypt_create_ivを
srand('hogehoge'); return mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
とかすると、毎回同じ。
CBCで暗号化したとき、あとで、複合したいときは、暗号化したときのivを取っておかないといけない?
これだと一緒になる
/* データ */ $key = 'asdj;asdiojsadfasdfa;sdidfasndfain'; $plain_text = "DATA DATA DATA!" ; $td = getMcryptModule(); $key = substr($key, 0, mcrypt_enc_get_key_size($td)); $iv_size = mcrypt_enc_get_iv_size($td); $iv = getIv($iv_size); $encData = enc($plain_text, $key, $iv) ; var_dump( bin2hex( $encData ) ); var_dump( dec( $encData, $key, $iv ) ); function enc($data,$key, $iv){ $td = getMcryptModule(); mcrypt_generic_init($td, $key, $iv); /* データを暗号化します */ $c_t = mcrypt_generic($td, $data); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $c_t ; } function dec($data, $key, $iv){ $td = getMcryptModule(); mcrypt_generic_init($td, $key, $iv); /* データを暗号化します */ $p_t = mdecrypt_generic($td, $data); /* 後始末をします */ mcrypt_generic_deinit($td); mcrypt_module_close($td); return $p_t ; } function getMcryptModule(){ //$td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, ''); $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); return $td ; } function getIv($iv_size){ return mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); }