2013-11-21 28 views
0

我試圖用base64_encode以不同的方式顯示id。我也試圖給id添加一個大數字,這樣字符串看起來會更長。base64_encode/decode無法正常工作

問題是我加密一個數字使其成爲一個字符串。然後當我解密相同的字符串我期望相同的值,但在我的情況下,它返回不同的值。

爲什麼我看不到相同的值?

這是我的代碼:

define('IDS_SALT', 852045641596357); 

function simple_encode($id){ 
    $data = ''; 
    $id += IDS_SALT; 
    $data = base64_encode($id); 
    $data = str_replace(array('+','/','='),array('-','_','.'),$data); 
    return $data; 
} 


function simple_decode($code){ 
    $data = ''; 
    $code = str_replace(array('-','_','.'),array('+','/','='),$code); 
    $id = base64_decode($code); 
    $id -= IDS_SALT; 
    return $id; 
} 

//this is returning "OC41MjA0NTY0MTU5NjM2RSsxNA.." 
echo 'Encrypted: '; 
echo simple_encode(7); 
echo '<br />'; 

//this is returning 3 a NOT 7. it should return 7 
echo 'Encrypted: '; 
echo simple_decode( simple_encode(7) ); 
echo '<br />'; 
+3

你的鹽整數道外爲一個32位的PHP安裝,這在2,147,483,647簽署32位INT馬克塞斯支持的範圍。做一個'echo IDS_SALT'來看看真正儲存在裏面的東西。 –

+0

我沒有echo number_format(IDS_SALT,0,'','');並顯示相同的號碼,我存儲在IDS_SALT – Jaylen

+0

馬克B是現貨 - 只是交換到一個32位機和鹽沒有按規定存儲。 – steve

回答

0

我只是跑相同的代碼(完全按照以上)我的測試服務器上在這裏 - 我收到不同的結果:

加密:ODUyMDQ1NjQxNTk2MzY0

加密:7

看起來是正確的?

測試腳本中是否有其他代碼可能會干擾?

史蒂夫

+0

謝謝Steve,I我不知道是否我們正在運行不同的PHP版本,使不同或不同。當我運行上面的代碼時,我看到以下加密:OC41MjA0NTY0MTU5NjM2RSsxNA ..加密:3 – Jaylen

+0

可能 - 我運行PHP 5.3這一端。 – steve