2012-02-26 166 views
2

我一直在抓我的頭在這一個,即使它不應該如此困難......我試圖通過GET查詢字符串傳遞電子郵件不POST我想掩蓋此電子郵件只要電子郵件沒有顯示在網址中,我並不關心是否有好的加密或任何東西......反正我試圖加密它並使用mcrypt_generic進行解密。我遇到的問題是加密時,它會將電子郵件轉換爲各種字符,如:「ñüüŸPsúœœáááagé」我想返回正常的字母數字字符,因此我試圖對此執行hex2bin,並且它運行良好問題是在php5中沒有bin2hex!我嘗試了一些我在網上找到的函數來回復這個改變,它的效果和你所看到的一樣,但是如果你比較if語句中的字符串,他們不匹配,所以當我解密它時,它不會返回我最初通過的值相同。無論如何,我想知道是否有人可以給我一些建議,告訴我如何通過GET傳遞電子郵件,而不必閱讀電子郵件,然後在我的代碼讀取參數時恢復正常。php查詢字符串參數

這是我的加密方法和HEX2BIN函數轉換器:

function encrypt($data) 
{ 
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''); 
if (mcrypt_generic_init($cipher, _QRYKEY, _IVKEY) != -1) 
{ 
    $encrypted_data = mcrypt_generic($cipher,$data); 
    mcrypt_generic_deinit($cipher); 
} 

return bin2hex($encrypted_data); 
} 

function decrypt($data) 
{ 
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, ''); 
if (mcrypt_generic_init($cipher, _QRYKEY, _IVKEY) != -1) 
{ 
    $decrypted_data = mdecrypt_generic($cipher,hex2bin($data)); 
    mcrypt_generic_deinit($cipher); 
} 

return $decrypted_data; 
} 

function hex2bin($h) 
{ 
if (!is_string($h)) return null; 

$r=''; 
for($a=0; $a<strlen($h); $a+=2) 
{ 
    $r.=chr(hexdec($h{$a}.$h{($a+1)})); 
} 

return $r; 
} 
+0

哪裏是你的代碼,你實際上是加密電子郵件和檢索GET字符串? – 2012-02-26 23:08:06

+0

你有沒有試過base64?不是加密,但會完成這項工作。 – rodrigoap 2012-02-26 23:09:29

+0

如果你想要hex2bin和bin2hex的替代品,你可以嘗試玩「pack」和「unpack」http://www.php.net/manual/en/function.pack.php – Optimist 2012-02-26 23:11:39

回答

4

使用base64_encode()以文本安全格式編碼什麼,並base64_decode()得到原始數據備份

+0

不能相信它就是這樣......我知道它應該比我做的所有事情都簡單,但我不能把手指放在它上面......謝謝一堆! – 2012-02-26 23:26:54

2

只需使用urlencode()將另一端的urldecode()`轉換爲全部的"ñ¯üŸPsúœœ á ag-characters before sending them into the URL and and

http://php.net/manual/en/function.urlencode.php

+0

這不是,但這不應該是這個例子中的問題 – 2012-02-26 23:14:50

+0

我剛剛檢查過它,似乎它是二進制安全的,因此可以用作解決方案。這就是爲什麼我刪除了我的評論;-) – zerkms 2012-02-26 23:22:18

+0

:)謝謝你的雙重檢查。我實際上搜索了它,發現一個隨機的參考資料表明它不是,但這很好知道! – 2012-02-26 23:32:04