用于编码函数的Php解码函数

用于编码函数的Php解码函数,php,Php,我在php中有一个encode函数,我试图为它制作一个解码函数,但没有成功。。有人能帮我吗 function encode($data) { $password = 'EBuLTKjdCf0dmX7MQ1SrquKtvs7Fn5EW13xouUNGWwpqLWisMqe8v574HWS1UT2bkAMXC163euCz5MDm0U2GpuY'; $salt = substr(md5(mt_rand(), true), 8); $key = md5($password .

我在php中有一个encode函数,我试图为它制作一个解码函数,但没有成功。。有人能帮我吗

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);
}
解码函数返回空字符串。

这应该可以:

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已经为它们提供了支持:mcrypt是abandomware,在PHP7.1中贬值,可能在PHP7.2中删除。这绝对不是一种散列算法。最好不要使用mcrypt,它已经被废弃了近十年。因此,它已被弃用,将从核心中删除,并在PHP7.2中放入PECL。它不支持标准的PKCS7 née PKCS5填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt在2003年就有很多杰出的作品。相反,考虑使用或提供完整的解决方案,并保持正确。
php > echo decode(encode("Lorem ipsum dolor sit amet"));
Lorem ipsum dolor sit amet