PHP - signe avec de requête GET

J'ai un script PHP qui fait un cryptage de base d'une chaîne de caractères grâce à la méthode ci-dessous:

<?php
$key = 'secretkey';
$string = $_GET['str'];
if ($_GET['method'] == "decrypt")
{
$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
if ($_GET['method'] == "encrypt")
{
$output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
echo $output;
?>

Un exemple d'une URL pour chiffrer une chaîne devrait ressembler à ceci:

Chiffrer.le php?méthode=encrypt&str=le rapide renard

Qui permettrait le retour de ce que la chaîne cryptée:

LCuT/ieVa6cl3/4VtzE+jd9QPT3kvHYYJFqG6tY3P0Q=

Maintenant décrypter la chaîne tout ce que vous avez à faire est de changer la "méthode de la requête" à "déchiffrer", comme suit:

Chiffrer.le php?méthode=décrypter&str=LCuT/ieVa6cl3/4VtzE+jd9QPT3kvHYYJFqG6tY3P0Q=

Le seul problème est que lorsque que la chaîne cryptée est décrypté elle renvoie ceci:

§§rYV}Ì35Äš·nßì(ñïX8Þ;b

Je le ramène le problème à la plus signe qui est dans la chaîne cryptée. PHP la méthode GET semble traduire un signe plus dans un espace vide. J'ai cherché ce bug trouvé et qu'il a déjà été déposée ici. J'ai essayé différentes méthodes figurant sur cette page et d'autres, sans succès. Le plus proche que je suis en utilisant ce:

$fixedstring = str_replace(" ", "+", $string);

et puis, à l'aide de $fixedstring dans les méthodes de chiffrement, le problème est, sur le décryptage, tous les espaces vides sont convertis à des signes plus. Des idées?

Je sais à l'aide de POST aurait plus de sens, mais je suis en utilisant GET pour des raisons spécifiques. Je l'épargnerai les détails.

InformationsquelleAutor user | 2010-04-20