Moin zusammen.
Ich habe ein kleines Problem. Ich möchte einen $_Get Parameter verschlüsseln und später wieder entschlüsseln. Beides funktioniert soweit auch. Allerdings wird mir beim entschlüsseln das Array im $_GET völlich verhauen.
Ich benutze zum ver- und entschlüsseln folgende Klasse:
Zum Verschlüsseln des Links nutze ich dann folgenden Code:
und Zum Entschlüsseln dann diesen Code:
Das Ergebniss sieht dann wie Folgt aus:
Wie man sieht wird das Get Array nach dem entschlüsseln falsch aufgebaut so das ich mit dem GET Parameter eigentlich nichts mehr anfangen kann.
Leider hab ich keine Ahnung wo genau der Fehler sitzt und Hoffe das ich hier vielleicht hiolfe bekommen könnte. Vielen Dank schonmal im Vorraus.
Greetz Deep
Ich habe ein kleines Problem. Ich möchte einen $_Get Parameter verschlüsseln und später wieder entschlüsseln. Beides funktioniert soweit auch. Allerdings wird mir beim entschlüsseln das Array im $_GET völlich verhauen.
Ich benutze zum ver- und entschlüsseln folgende Klasse:
PHP-Code:
<?php
class URLEncryption {
/**
* @var string Enthält das Verschlüsselungspasswort
*/
private $_key = "Hier_Passwort";
/**
* Verschlüsselt einen String.
* @access private
* @param string $pData Der zu verschlüsselne String
* @return string Der verschlüsselte String, kodiert mittels einer URL-sicherem base64
*/
private function encrypt($pData) {
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->_key,
trim($pData), MCRYPT_MODE_ECB));
$encode = $this->base64url_encode($passcrypt);
return $encode;
}
/**
* Entschlüsselt einen String
* @access private
* @param string $pData Der verschlüsselte String
* @return string Der entschlüsselte String
*/
private function decrypt($pData) {
$decoded = $this->base64url_decode($pData);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->_key, trim($decoded),
MCRYPT_MODE_ECB));
return $decrypted;
}
/**
* Kodiert einen String mittels base64. Dabei wird auf eine gültige Verwendung in einer URL geachtet.
* @access private
* @param string $pData Der zu kodierende String
* @return string Der base64-Kodierte String
*/
private function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
/**
* Dekodiert einen String mittels base64. Dabei wird auf eine gültige Verwendung in einer URL geachtet.
* @access private
* @param string $pData Der zu dekodierende String
* @return string Der dekodierte String
*/
private function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
/**
* Parst den verschlüsselten $_GET-String.
* @param $pData Der verschlüsselte $_GET-String.
* @return void Es wird nichts zurück gegeben.
*/
function parseEncryptedGET($pData) {
parse_str($this->decrypt($pData), $_GET);
}
/**
* Verschlüsselt einen $_GET-String (á la "foo=bar&bar=foo")
* @param string $pGETString Der GET-String
* @return string Der verschlüsselte String.
*/
function createEncryptedGET($pGETString) {
return $this->encrypt($pGETString);
}
}
?>
PHP-Code:
<?
include "class/urlenc.class.php";
$urlenc = new URLEncryption();
echo ' - <a href="enc.php?data='.$urlenc->createEncryptedGET("$newdomain").'">Jetzt Registrieren</a>';
?>
PHP-Code:
<?
echo "Codiert: ";
print_r($_GET);
echo "<br>";
include "class/urlenc.class.php";
$urlenc = new URLEncryption();
if(isset($_GET["data"])) {
$urlenc->parseEncryptedGET($_GET['data']);
}
echo "Decodiert: ";
print_r($_GET);
?>
Codiert: Array ( [data] => g5MCRSxLptIqYZtA8Yyqr3PSOnxEX7LRneCLAVviz9c )
Decodiert: Array ( [deepzone-teile_de] => )
Decodiert: Array ( [deepzone-teile_de] => )
Wie man sieht wird das Get Array nach dem entschlüsseln falsch aufgebaut so das ich mit dem GET Parameter eigentlich nichts mehr anfangen kann.
Leider hab ich keine Ahnung wo genau der Fehler sitzt und Hoffe das ich hier vielleicht hiolfe bekommen könnte. Vielen Dank schonmal im Vorraus.
Greetz Deep
Kommentar