2016-03-22 14 views
1

Hallo Ich benutze eine Verschlüsselungsfunktion, um meine URI zu verschlüsseln, bevor sie urlencodiert und Funktion, um es schließlich entschlüsseln, nachdem ich urldecoded in empfangende Seite. Es funktioniert gut, aber gelegentlich urldecode ersetzt alle + mit Leerzeichen, so dass meine Entschlüsselungsfunktion fehlschlagen.Ist es sicher, Verschlüsselung vor urlencode/urldecode zu verwenden? verschlüsselte GET-URL gibt nicht den gleichen Wert zurück, ersetzt alle + mit Leerzeichen gelegentlich

Hier meine verschlüsseln und entschlüsseln Funktionen:

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); 
} 

Und hier ist, wie ich meine GET URL vorbereite:

   $encrypted_id = encryptIt($id); 

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

Und dann mein Empfangs Skript:

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

Ist es sicher, Verschlüsselung/Entschlüsselung und URlencode/urldecode gleichzeitig zu verwenden? oder ich mache es irgendwo falsch.

+0

'urlencode' sollte alle' + 'Zeichen in'% 2B' ändern, also sollte kein '+' in der URL sein. – Barmar

+0

Ja, es ändert alle '+' Zeichen zu '% 2B', das Problem ist, wenn ich sie alle '% 2B' gelegentlich Leerzeichen anstelle von '+' Zeichen ersetzen –

Antwort

4

Rufen Sie nicht urldecode() im Empfänger an. PHP decodiert automatisch alle URL-Parameter, bevor es sie in $_GET setzt. Du dekodierst also zweimal; die automatische Decodierung übersetzt %2B zu +, und dann Ihr Anruf an urldecode() übersetzt + ins Weltall.

+0

Dank @Barmar, es funktioniert jetzt gut :) Mir ist nicht aufgefallen, dass ich mit urldecode eigentlich zweimal dekodiere: P –

+0

Denke darüber nach: Normalerweise brauchst du beim Zugriff auf URL-Parameter keinen 'urldecode', obwohl der Browser automatisch alles kodiert. – Barmar