2012-11-30 23 views
-1

我有一些我想要加密的東西,並通過在URL中傳遞它,我想要加密的值類似於'019230132_15/10/2012'(一個數字加下劃線,然後是巴西格式的日期),當我加密這個值時,我得到'cMZns2q7U2vgD9t + zufUeKextc/WyuFB4WyVMQ ='這樣的東西,但是通過GET傳遞這個URL會給我帶來問題,導致瀏覽器認爲'/ 「在價值的中間是一個目錄分隔符,我encription算法是這樣的:用Mcrypt加密一個值是使用目錄分隔符

base64_encode(
    mcrypt_encrypt(
     MCRYPT_RIJNDAEL_256, 
     md5(self::ENCRYPT_SALT), 
     $value, 
     MCRYPT_MODE_CBC, 
     md5(md5(self::ENCRYPT_SALT)) 
    ) 
); 

我甚至不想知道爲什麼發生這種情況,我只是想一些辦法,我可以加密和解密價值,它不一定是最安全的方式帽子一直存在,因爲我提供的信息並不值得闖入它的麻煩。

EDIT1:使用PHP函數進行urlencode不工作,我得到一個錯誤404,因爲url_encode轉換「/」爲「%2F」,我認爲這是值得一提的,我使用mod_rewrite在我的Apache

EDIT2:管理使用兩次一樣進行urlencode(用urlencode($值)),以及解碼的兩倍,以及得到原始值,使用urlencode工作

+1

1)AES 256需要** 256位密鑰**。 'md5(self :: ENCRYPT_SALT)'只提供128位 - 你只是削弱了你的安全性。 2)IVs應該是完全隨機的,不能重複使用。 'md5(md5(self :: ENCRYPT_SALT))'既不是隨機的,也不是唯一的。 (除非每次加密都改變密鑰 - 在這種情況下再次參見第1點) - 我不在乎你是否不在乎,我不希望其他人看到這一點,並且認爲你所做的是正確的。 – Leigh

+0

@Leigh我在這裏實際得到了這個算法在StackOverFlow中,你可以在這裏看到它http://stackoverflow.com/questions/1289061/best-way-to-use-php-to-encrypt-and-decrypt – Murilo

+1

@Leigh有一個很好的觀點,並且看起來像他上面看到和使用不安全的代碼的假設是真實的,如上面的評論所證明的。 = o \ –

回答

2

如果要創建在PHP(價值即通過從PHP到瀏覽器的鏈接,如a標籤),首先使用PHP的urlencode

但是,如果你正在使用JavaScript,使用JavaScript的escape functions,特別encodeURIComponent

+0

實際上設法工作,再次使用像urlencode(urlencode($ value))的函數並解碼兩次以獲得原始值 – Murilo