2014-02-19 62 views
-1

我正在處理一個應用程序,而我被卡在這裏。刪除這些額外的字符

我正在做一個產品刪除頁面,其中的id在URL中傳遞,以便我可以搜索數據庫並選擇特定的記錄。 由於傳遞身份證不是一個好主意,所以我在散列中加密ID然後傳遞。但是由於散列之間有一些空格,所以當我嘗試在我的應用程序中使用它時。在散列中添加了外部空格字符以填充空格。

這是我的加密功能: -

function getHash($recordid) 
{ 
    global $db; 
    $key_value="[email protected]@"; 
    $plain_text=$recordid; 
    $encrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $plain_text, MCRYPT_ENCRYPT); 
    return $encrypted_text; 
} 

這裏就是我得到輸出$ plain_text = 1時,我不會在URL通過,並簡單地打印出來。

ÑÛo‡Ó‰-7 

但是,如果我通過URL傳遞給它,它就會被轉換成這樣: -

%D1%DBo%87%D3%89-7 

所以肯定當我將其解密,我不會得到正確的結果。 解密後有沒有什麼方法可以得到原始值(本例中爲1),還是我完全可以使用不同的解密,加密函數,以便我擺脫這個問題?

謝謝。

+0

對不起,但不應該爲此操作需要授權?默默無聞的安全性很少是一種好方法。 – raina77ow

+0

這肯定需要授權。 用戶需要登錄,我有一個功能,檢查具有特定ID的產品是否映射到用戶的帳戶。 但我也想通過解密id來添加另一個安全層。 – Ankur

+0

您可以使用urlencode($ encrypted_text),以便轉換爲可轉發編碼而不會破壞實際值,然後使用urldecode($ encrypted_text)在頁面上獲取您的散列:) [測試此處](http://meyerweb.com)/eric/tools/dencoder /) –

回答

0

因爲這些都是8位字符,所以當它們被編碼時,它們被轉換成它們的%XX十六進制表示。當Web服務器位於URL的Query部分時,它會爲您做相反的處理,所以您應該沒問題。儘管如此,在製作URL之前對加密字符串進行64位編碼並將其64位解碼比較安全,因此您只需要處理ASCII字符即可。

+0

你能舉個例子嗎?或者任何鏈接? – Ankur

+0

參見http://php.net/manual/en/function.base64-encode.php和http://php.net/manual/en/function.base64-decode.php。 base64_encode的結果總是一個「漂亮的」ascii字符串。 –