2014-01-13 48 views
2

有人可以帮我这个:
PHP - Mcrypt的结果不同于解密?

当我尝试mcryp 253|[email protected] ..然后解密输出..它返回253|[email protected]��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|[email protected]'); // oCaWMrNIAX6wCS.HSlvFGspMLauXaSyAE.ze7j9q4Qk- 
echo mdecrypt($str); 

回答

1

这是因为你的钥匙。

这是你的钥匙:

$key = '4oF9B2N_WXbmvIC5nNLLTbnmr5knkEBNBcrJt9m3xM3kjFyCZc3QAZbolXoCHO3g'; 

删除 “_”,从它。你会得到好的结果。

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

Phpfiddle url:http://phpfiddle.org/main/code/m95-4eb with working demo。

+0

你今天是我的英雄! – VyseExhale

+0

你愿意接受答案吗? – pregmatch

+0

Oopz对不起!接受它! – VyseExhale