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))), "<?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;
?>
");
}
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.
Vous devez vous connecter pour publier un commentaire.
Si vous allez lire l'intégralité de ce rapport de bug, vous verrez une référence à La RFC 2396. Qui stipule que + est réservés. PHP est correct dans la traduction d'un clair signe + pour un espace.
Vous pouvez utiliser la fonction urlencode() le texte chiffré au moment de retourner à l'utilisateur. Ainsi, lorsque l'utilisateur soumet le texte chiffré pour le décryptage, vous pouvez urldecode() il. PHP le fera automatiquement pour vous si ce n'est via le GET string ainsi.
Ligne du bas: Le + doit être soumis à PHP que la valeur codée: %2B
Je me rends compte que c'est une vieille question, mais j'étais à la recherche d'une solution à un problème similaire avec les signes + dans une chaîne de caractères. Je tombe sur cette page et pensé que je voudrais partager la solution, je suis venu avec.
Vous devriez être en utilisant
urlencode()
avant de mettre la chaîne cryptée sur la chaîne de requête, qui "s'échapper" des caractères spéciaux (y compris+
) et ensuite appelerurldecode()
avant de le décrypter, pour leur redonner leur forme d'origine.aucune des réponses ci-dessus, a travaillé pour moi, j'ai fixé le signe "+" problème à l'aide de
et
Nous avons rencontré le même problème en essayant de passer une URL d'un script PHP avec une variable de type string contenant le symbole"+". Nous avons été en mesure de le faire fonctionner avec;
Par exemple:
La
%2B
passe de la valeur correcte à l'aide de PHP OBTENIR que @hobodave dit, et nous revenons le droit de l'ensemble de données.Espère que cela aide quelqu'un d'autre qui a couru dans quelque chose comme cela, et avait besoin d'un peu différent sur les exemples ci-dessus.
Dans mon cas, le problème était que $_GET paramètres n'étaient pas décoder correctement dans le cas d'une requête MYSQL. Donc, si vous avez juste besoin de passer le $_GET contenu d'une requête mysql puis il suffit de le coder (pas besoin de décoder quoi que ce soit) comme ça: