2010-04-14 109 views
0

我在php中使用加密/解密編碼。有趣的東西!
但是,我遇到了一些問題,涉及什麼文本被加密到。使用base64_encode()的文本混淆處理

這是加密和解密一個字符串的兩個函數。它使用了一個加密密鑰,我將其設置爲模糊的。 我其實從php書中得到了這個。我稍微修改了一下,但並沒有改變它的主要目標。

我在下面創建了一個小例子,任何人都可以測試。
但是,我注意到有些字符顯示爲「加密」字符串。字符如「=」和「+」。 有時我通過url傳遞這個加密的字符串。這可能不完全符合我的接收腳本。我猜如果某些字符被看到,瀏覽器會對字符串做些什麼。我真的只是猜測。

是否有另一個函數可以用來確保瀏覽器不接觸字符串?還是有人知道足夠的PHP bas64_encode()禁止使用某些字符?我真的不希望後者成爲可能。但是,我確定有一個解決方法。

享受代碼,無論誰需要它!

define('ENCRYPTION_KEY', "sjjx6a"); 

function encrypt($string) { 

    $result = ''; 
    for($i=0; $i<strlen($string); $i++) { 
    $char = substr($string, $i, 1); 
    $keychar = substr(ENCRYPTION_KEY, ($i % strlen(ENCRYPTION_KEY))-1, 1); 
    $char = chr(ord($char)+ord($keychar)); 
    $result.=$char; 
    } 
    return base64_encode($result)."/".rand(); 
} 

function decrypt($string){ 
    $exploded = explode("/",$string); 
    $string = $exploded[0]; 
    $result = ''; 
    $string = base64_decode($string); 
    for($i=0; $i<strlen($string); $i++) { 
    $char = substr($string, $i, 1); 
    $keychar = substr(ENCRYPTION_KEY, ($i % strlen(ENCRYPTION_KEY))-1, 1); 
    $char = chr(ord($char)-ord($keychar)); 
    $result.=$char; 
    } 

    return $result; 
} 

echo $encrypted = encrypt("reaplussign.jpg"); 
echo "<br>"; 
echo decrypt($encrypted); 

回答

3

你可以使用PHP的urlencodeurldecode功能,使您的加密URL中的使用效果安全,如

echo $encrypted = urlencode(encrypt("reaplussign.jpg")); 
echo "<br>"; 
echo decrypt(urldecode($encrypted)); 
0

您應該看看urlencode()以正確地轉義字符串以便在查詢中使用。

0

如果你擔心+,=等類似的字符,你應該看一下http://php.net/manual/en/function.urlencode.php和它的朋友從「另見」部分。使用encrypt()對其進行編碼並在解密()開始時進行解碼。

如果這不適合你,也許一些簡單的替代?

$text = str_replace('+','%20',$text);