2016-03-22 30 views
1

Merhaba Umanımı şifrelemeden önce URI'mı şifrelemek için bir şifreleme işlevi kullanıyorum ve nihayet alma sayfasında URL'yi kodladıktan sonra şifresini çözme işlevi görüyorum. Sık sık çalıştığı, ancak bazen de tüm URL'leri boşluklarla değiştiren urldecode, bu yüzden şifre çözme işlevim başarısız oluyor.Urlencode/urldecode'dan önce şifreleme kullanmak güvenli midir? şifrelenmiş GET url aynı değeri döndürmez, ara sıra boşluklarla tüm + yerlerini değiştirir

   $encrypted_id = encryptIt($id); 

       $uri=urlencode($encrypted_id); 
       $uri="http://example.com/xyz.php?id=".$uri; 

Ve sonra benim alıcı komut:

   $id=urldecode($_GET['id']); 
       $id=decryptIt($id); 

İşte

benim şifrelemek ve şifresini işlevleri: Ben GET Url hazırlıyorum burada nasıl

function encryptIt($q) { 
    $cryptKey = 'aJB0rGtIn5UB1xG40efydp'; 
    $qEncoded  = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), $q, MCRYPT_MODE_CBC, md5(md5($cryptKey)))); 
    return($qEncoded); 
} 

function decryptIt($q) { 
    $cryptKey = 'aJB0rGtIn5UB1xG40efydp'; 
    $qDecoded  = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($cryptKey), base64_decode($q), MCRYPT_MODE_CBC, md5(md5($cryptKey))), "\0"); 
    return($qDecoded); 
} 

Ve olduğunu Şifreleme/şifre çözme ve URlencode/urldecode'u aynı anda kullanmak güvenli midir? Ya da yanlış bir şekilde bir yerlere yapıyorum.

+0

'urlencode', tüm' + 'karakterlerini' '% 2B' olarak değiştirmelidir, bu nedenle URL’de herhangi bir' + 'olmamalıdır. – Barmar

+0

Evet, tüm '+' karakterlerini '% 2B' olarak değiştiriyor, sorun onları '% 2B' olarak değiştirdiğimde sorun '+' karakterleri yerine boşluklarla değiştiriliyor –

cevap

4

Alıcıya urldecode() telefonunu arama. PHP, tüm URL parametrelerini otomatik olarak $_GET içine koyar. Yani iki kere kod çözüyorsun; otomatik kod çözme, %2B'u +'a çevirir ve sonra urldecode() aramanız, alana + çevirir.

+0

Teşekkürler @Barmar, şimdi iyi çalışıyor :) Ben urldecode kullanarak aslında iki kez kod çözme yapıyorum fark etmedim: P –

+0

Bunu düşünün: tarayıcı otomatik olarak her şeyi kodlasa bile, URL parametrelerine erişirken normalde 'urldecode' kullanmanız gerekmez. – Barmar