PHP envoyer des données cryptées via l'URL
Je suis en train d'envoyer des données chiffrées sur l'url d'un autre site (à l'aide de file_get_contents("anotherUrl.php?hash=$encryptedString")
. Le problème est que, parfois, le chiffrement contient des caractères spéciaux, comme +, ce qui provoque le déchiffrement à l'échec.
Voici mon chiffrement /déchiffrement méthodes:
public function encrypt($string, $key)
{
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
public function decrypt($encrypted, $key)
{
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "public function encrypt($string, $key)
{
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
public function decrypt($encrypted, $key)
{
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
");
}
Voici un exemple chiffré chaîne de caractères qui contient un +
, et je devine que cela provoque le déchiffrement à l'échec.
oWCrVPaS+5GbxcQFc0fulUk/zRAkDD60av4zlPiWskE=
Aucune idées de comment je pourrais résoudre ce problème? J'ai essayé de faire urlencode()
et urldecode()
sur la table de hachage, cependant cela semble aussi être la cause de chiffrement à briser. Est-il un moyen de modifier l'algorithme de chiffrement de l'obtenir pour seulement l'url de retour en sécurité des caractères?
En fait, j'ai copié la fonction exactement comme l'est d'une autre réponse ici, je n'ai pas apporté aucune modification.
Ehh... je ne vois pas l'intérêt de qui. Si la clé est faible (j'.e de ne pas partir d'un cryptage fort générateur de nombre aléatoire), vous devez pas être à l'aide de
md5
comme une clé-le renforcement de l'algorithme (voir PBKDF#2
, bcrypt
ou scrypt
). Si votre clé est déjà forte, vous êtes juste de gaspiller de cycles de processeur.Où avez-vous la cryptographie code? Il n'est pas sécurisé.
OriginalL'auteur Click Upvote | 2013-11-16
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à ce fil:
En passant chaînes codées en base64 dans l'URL
Essentiellement, vous NE voulez
urlencode()
avant l'envoi de la chaîne, cependant vous ne PAS voulezurldecode()
à l'autre extrémité.Il ya beaucoup de fois où urldecode() est nécessaire, mais ce n'est pas l'un d'eux. Ravi de vous aider.
Le
urlencode
est nécessaire puisque vous êtes la construction d'un query string ici. De l'autre côté de PHP qui prend de la chaîne de requête eturldecode
s que pour vous, écrit le résultat dans$_GET
. C'est la raison de l'asymétrie. Si vous étiez à analyser le query string vous-même, vous devez également avoir à faire laurldecode
vous-même.OriginalL'auteur jszobody
Afin de résoudre ce problème que j'ai maintenant, utilisez la commande suivante (après 3 heures de douleur), et il fonctionne très bien.
Hésitez pas à copier et coller
OriginalL'auteur Dan Green-Leipciger
Au lieu d'utiliser Base64 pour l'encodage de vos données, vous pouvez également utiliser Base32 (RFC 4648) qui est l'URL-safe, car il n'utilise que les lettres de A–Z (insensible à la casse) et les chiffres 2-7. Il y a déjà un Bibliothèque PHP pour l'encodage/décodage. Notez que Base32 faut ~20% d'espace en plus que Base64.
Vous pouvez également utiliser URLcrypt qui est une pratique de la bibliothèque pour vous aider avec le cryptage et de Base32 encodage.
OriginalL'auteur rkallensee