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);
}