PHP - Mcrypt结果与解密不同?

时间:2014-01-13 14:26:27

标签: php mcrypt

有人可以帮我这个:

当我尝试mcryp 253|someonesnew@gmail.com ..然后解密输出..它返回253|someonesnew@gmail.co��o{�

奇怪的是:当我更改任何给定的字符时,输出总是带有一个奇怪的字符..除了..如果我只添加一个字符或删除一个...输出是好的..

这怎么可能?

 function url_base64_decode($str){
    return base64_decode(strtr($str,
        array(
        '.' => '+',
        '-' => '=',
        '~' => '/'
        )
    ));
}
function url_base64_encode($str){
    return strtr(base64_encode($str),
        array(
            '+' => '.',
            '=' => '-',
            '/' => '~'
        )
    );
}
function mdecrypt($input){
        $key = '4oF9B2N_WXbmvIC5nNLLTbnmr5knkEBNBcrJt9m3xM3kjFyCZc3QAZbolXoCHO3g';
    $input = trim(chop(url_base64_decode($input)));

    $td = mcrypt_module_open ('tripledes', '', 'ecb', '');
    $key = substr(md5($key),0,24);
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);
    mcrypt_generic_init ($td, $key, $iv);
    $decrypted_data = mdecrypt_generic ($td, $input);
    mcrypt_generic_deinit ($td);
    mcrypt_module_close ($td);
    return trim(chop($decrypted_data));
}



function mencrypt($input) {
    $key = '4oF9B2N_WXbmvIC5nNLLTbnmr5knkEBNBcrJt9m3xM3kjFyCZc3QAZbolXoCHO3g';
    $key = substr(md5($key),0,24);

    $td = mcrypt_module_open ('tripledes', '', 'ecb', '');

    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MCRYPT_RAND);

    mcrypt_generic_init ($td, $key, $iv);
    $encrypted_data = mcrypt_generic ($td, $input);

    mcrypt_generic_deinit ($td);
    mcrypt_module_close ($td);
    return trim(chop(url_base64_encode($encrypted_data)));
}

$str = mencrypt('253|someonesnew@gmail.com'); // oCaWMrNIAX6wCS.HSlvFGspMLauXaSyAE.ze7j9q4Qk-
echo mdecrypt($str);

1 个答案:

答案 0 :(得分:1)

这是因为你的钥匙。

这是你的关键:

$key = '4oF9B2N_WXbmvIC5nNLLTbnmr5knkEBNBcrJt9m3xM3kjFyCZc3QAZbolXoCHO3g';

从中删除“_”。你会得到好结果。

我有同样的问题,我通过从我的密钥中删除“_”或任何其他特殊字符来解决这个问题。

Phpfiddle url:http://phpfiddle.org/main/code/m95-4eb带有工作演示。