1 votes

Cryptage d'une valeur à l'aide de la fonction AES_ECRYPT de MySQL, puis transmission de cette valeur dans une chaîne d'URL, à l'aide de PHP

J'ai besoin de crypter une chaîne en utilisant la fonction AES_ENCRYPT de MySQL, puis d'attacher cette chaîne cryptée à la fin d'une URL, de sorte qu'elle puisse être décryptée et utilisée par un script PHP script à l'autre bout de la chaîne.

En gros, je crypte la chaîne (en utilisant AES_ENCRYPT de MySQL), puis j'utilise la fonction rawurlencode() de PHP pour la rendre "URL sûre". Je passe ensuite la chaîne cryptée dans une URL, qui est ensuite récupérée par le script PHP script à l'autre bout, où elle est décryptée avec succès... environ 95% du temps.

Il semble qu'environ 5% des chaînes soient cryptées de telle manière qu'elles sont corrompues quelque part dans le processus, et ne peuvent pas être décodées à l'autre bout après avoir été transmises par une URL. Quelqu'un peut-il m'aider ? Existe-t-il une méthode infaillible à 100% pour faire cela ? J'ai également essayé d'utiliser urlencode() ainsi que base64_encode() dans différentes combinaisons.

Gracias.

1voto

Callum Points 23

Résolu.

Une fois la chaîne cryptée à l'aide de la fonction AES_ENCRYPT de MySQL, j'utilise la fonction bin2hex() de PHP pour convertir les données cryptées (qui sont sous forme binaire) en hexadécimales. Je passe ensuite l'hexadécimal en tant que chaîne de caractères à la fin de l'URL. Une fois l'URL reçue à l'autre bout, j'utilise cette fonction PHP personnalisée pour reconvertir la chaîne hexadécimale en chaîne binaire :

function hex2bin($data) {
    $len = strlen($data);
    return pack("H" . $len, $data);
}

À partir de là, il ne reste plus qu'à décrypter les données à l'aide de la fonction AES_DECRYPT de MySQL, et le tour est joué. La chaîne de caractères originale est restaurée avec succès.

0voto

Borealid Points 35075

Les URL ont une longueur maximale limitée. Ce n'est pas le cas des chaînes de caractères chiffrées par AES.

Les URL ne sont pas un vecteur approprié pour transmettre des informations arbitraires. L'utilisation d'un POST HTTP est un bien meilleur moyen, si vous devez communiquer via HTTP.

Pourquoi vous rencontrez des problèmes : citation de la page du manuel PHP sur urlencode :

Note : Attention aux variables qui peuvent correspondre à des entités HTML. Des choses comme &, &copy et &pound sont analysés par le le navigateur et l'entité réelle est utilisée est utilisée au lieu du nom de la variable souhaitée. Il s'agit d'un problème évident que le W3C en parle depuis des années. depuis des années. La référence http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 . PHP supporte le changement de l'argument pour le séparateur suggéré par le W3C, à savoir suggéré par le W3C, grâce à la directive arg_separator .ini. Malheureusement, la plupart des n'envoient pas les données du formulaire dans ce format. dans ce format séparé par un point-virgule. A manière plus portable de contourner ce problème est d'utiliser d'utiliser & au lieu de & comme le séparateur. Vous n'avez pas besoin de modifier l'arg_separator de PHP pour cela. Laissez-le comme &, mais simplement enc en utilisant htmlentities() ou htmlspecialchars().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X