2016-12-01 6 views
-1

私はPHPでエンコード関数を持っていますが、デコード関数を作成しようとしましたが、うまくいきませんでした。エンコード関数のPHPデコード関数

function encode($data) 
{ 

    $password = 'EBuLTKjdCf0dmX7MQ1SrquKtvs7Fn5EW13xouUNGWwpqLWisMqe8v574HWS1UT2bkAMXC163euCz5MDm0U2GpuY'; 
    $salt = substr(md5(mt_rand(), true), 8); 
    $key = md5($password . $salt, true); 
    $iv = md5($key . $password . $salt, true); 
    $ct = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); 
    $unique = md5(mt_rand(), true); 
    return str_replace(array('+', '/'), array('-', '_'), rtrim(base64_encode($unique . $salt . $ct), '=')); 
} 

function decode($data) { 


    $password = 'EBuLTKjdCf0dmX7MQ1SrquKtvs7Fn5EW13xouUNGWwpqLWisMqe8v574HWS1UT2bkAMXC163euCz5MDm0U2GpuY'; 
    $salt = $data = base64_decode(str_replace(array('-', '_'), array('+', '/'), $data)); 
    $ct = substr($data, 18); 
    md5($password . $salt, true); 
    $key = substr($data, 10, 8); 

    $iv = md5($key . $password . $salt, true); 
    $pt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ct, MCRYPT_MODE_CBC, $iv); 
    return trim($pt); 
} 

デコード関数はヌル文字列を返します。

+0

ハッシュがこっちを見ている一つの方法 –

+0

よりもむしろ自身の機能を開発しているhttp://php.net/manual/en/ ref.password.php phpは既にそれらをサポートしています:) – georoot

+0

* mcrypt *は** abbandware **です。PHP 7.1で償却され、おそらくPHP 7.2で削除されました。 – Xorifelse

答えて

2

これは動作するはずです:

function decode($data) { 
    $password = 'EBuLTKjdCf0dmX7MQ1SrquKtvs7Fn5EW13xouUNGWwpqLWisMqe8v574HWS1UT2bkAMXC163euCz5MDm0U2GpuY'; 
    $decoded = base64_decode(str_replace(array('-', '_'), array('+', '/'), $data)); 
    $unique = substr($decoded, 0, 36); 
    $salt = substr($decoded, 16, 8); 
    $ct = substr($decoded, 24); 
    $key = md5($password . $salt, true); 
    $iv = md5($key . $password . $salt, true); 
    $pt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ct, MCRYPT_MODE_CBC, $iv); 

    return trim($pt); 
} 

例えば:

php > echo decode(encode("Lorem ipsum dolor sit amet")); 
Lorem ipsum dolor sit amet