2012-08-01 77 views
1

我已經從this question錯誤的與加密/解密

答案複製源,並已創建了這個兩個功能

function my_encrypt($string) { 
    $key="1234"; 
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), 
     $string, MCRYPT_MODE_CBC, md5(md5($key)))); 
} 

function my_decrypt($string) { 
    $key="1234"; 
    return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), 
     base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
} 

,當我試圖進行加密和使用以下

所示的代碼解密
$string="445676467"; 
    echo $ecr=my_encrypt($string)."<br/>"; 
    echo my_decrypt($ecr); 

以下輸出產生

01pEoOCsp7oloZTDMAKF/cxgB0YQFScje6Z8GBXu8Tw =

445676467>HŽÇeVJMç>ÑÑBHc.-ãyeÇN - =「VSA

出錯,這是解密是不給正確的輸出中哪個是445676467

但是當我試圖這直接

$key="1234"; 
    $string="2011"; 
    $encrypted= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 
     md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 

    $decypted= rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), 
     base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
    echo $encrypted."<br/>"; 
    echo $decypted; 

這給了正確的答案

+2

在解密字符串之前,您需要'base64_decode'。 – 2012-08-01 19:01:27

+1

我沒有得到它..你會創建兩個函數,我試圖創建和發佈答案? – 2012-08-01 19:05:33

+1

@RobertK你在哪裏看到它沒有被base64解碼?我在工作和非工作版本中都看到'base64_decode($ string)'... – 2012-08-01 19:17:33

回答

2

這很有趣,但原因是你的syntex。

我用你的代碼:

 $string="445676467"; 
//You echo & put value in the var at the same time?? smells like troubles. 
     echo $ecr=my_encrypt($string)."<br/>"; 
     echo my_decrypt($ecr); 

結果:

01pEoOCsp7oloZTDMAKF/cxgB0YQFScje6Z8GBXu8Tw= 
445676467�H���eVJM�>��BHc.��ye�N�=�VS� 

並試圖:

$string="445676467"; 
    $ecr=my_encrypt($string); 
    echo $ecr; 
    echo my_decrypt($ecr); 

結果:

01pEoOCsp7oloZTDMAKF/cxgB0YQFScje6Z8GBXu8Tw= 
445676467 

因此,你的功能沒有錯,只是用法。 首先將該值放入變量中,然後纔打印出來。

+0

閱讀我的問題中的第4條評論(鈀評論) – 2012-08-03 10:53:38

+0

錯過了那一個。 – 2012-08-03 10:57:00