2012-10-15 52 views
0

我使用php解密來檢查:回覆請求的電子郵件地址與發送請求的電子郵件地址相同。php解密失敗的URL

這是代碼,但在底部simpy失敗。

的網址就是:

blah.com/page?keyemail=fSHEk8KC17siklGHsj0HJA== 

下面還的代碼顯示了一些測試,我所做的,以確保加密/解密正在努力確定...我回顯下來的代碼,看看發生了什麼事在

$key="XiTo74UI09wwe4YeUmuvbL0E"; 

$iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM); 

// Encrypting 
function encrypt($string, $key) { 
    $enc = ""; 
    global $iv; 
    $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv); 

    return base64_encode($enc); 
} 

// Decrypting 
function decrypt($string, $key) { 
    $dec = ""; 
    $string = trim(base64_decode($string)); 
    global $iv; 
    $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv); 
    return $dec; 
} 

// test example 
$email = '[email protected]'; 

echo "email is $email<br /><br />"; 

$email_key = encrypt($email, $key); 

echo "key is $email_key<br /><br />"; 

$email_key2 = decrypt($email_key, $key); 

echo "decrypted is $email_key2<br /><br />"; 
// END test example, all is ok 


// this is the code that fails 
$to_de = $_GET[keyemail]; 

echo "keyemail again is $to_de<br /><br />"; 

$email_key3 = decrypt($to_de, $key); 

echo $email_key3; 

當我回聲$ email_key3以某種方式編碼是什麼返回 - 它應該是[email protected]

我可能失去了一些東西很明顯,但它失去了我!

+0

因爲你已經知道它應該來自哪個電子郵件,所以最好在這裏使用哈希,但是'$ _GET ['keyemail']'的var_dump是什麼,因爲它應該代替'$ _GET [keyemail]'因爲即使PHP將keyemail翻譯爲字符串,如果我沒有記錯,它也會引發E_NOTICE。 – Sammaye

+0

什麼是回報?你能爲我們打印出來嗎? – Sammaye

回答

-1

我注意到你使用的加密方法是添加一個隨機鹽。這意味着使用相同的密鑰加密相同的字符串不會導致相同的輸出。 嘗試使用非隨機KDF。 試試這個話題的答案:https://stackoverflow.com/a/1289114/1745542

+0

不,修復不了,謝謝 –

+0

@meza:請學習如何正確使用數組索引:http://www.php.net/manual/en/language.types.array.php#language.types。 array.foo-bar –

+0

哈哈,真的!剛剛從問題中複製了代碼。 – meza

0

您不能生成每個頁面上的新IV - 您必須在IV從文件或數據庫的加密步驟存儲 - 或追加到加密的字符串。在下一頁生成新的IV將不允許您解密字符串。

此外,如果可能的話,我會通過電子郵件散列(加一個鹽) - 而不是一個加密的形式。

+0

當我進行AES加密/解密時,我每次都會創建一個隨機IV:'$ iv = mcrypt_create_iv($ iv_size,MCRYPT_RAND);'只要我擁有相同的密鑰和iv大小,我相信它應該可以工作(並且確實)除非那是特定於該算法的東西? – Sammaye

+0

如果不同的IV適用於輸入和輸出 - IV的重點是什麼?要麼你的算法不需要它,要麼它需要相同。 – Xeoncross