Envoi d'une chaîne cryptée par mcrypt via un paramètre d'URL - le texte décodé est altéré
Je me suis amusé avec un simple régime d'autorisation. Je pense que la façon la plus simple de le faire sans SSL ou autre HTTP auth serait un cryptage à clé partagée. L'adaptation d'un exemple simple de le manuel PHP, je suis venu avec les éléments suivants:
$text = "boggles the invisible monkey will rule the world";
$key = "This is a very secret key";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $text, MCRYPT_MODE_ECB, $iv);
$iv = base64_encode($iv);
$enc = base64_encode($enc);
echo '<a href="temp2.php?iv='.$iv.'&text='.$enc.'">link</a><br />';
La page qui reçoit cette demande (temp2.php ressemble à ceci:
$key = "This is a very secret key";
$iv = base64_decode($_GET["iv"]);
$enc = base64_decode($_GET["text"]);
$crypttext = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
echo "$crypttext<br>";
Cela devient très près, mais il n'a pas décoder correctement-- il fait écho à
boggles the invisible monkey will rule t—;eôügJë
Je ne suis pas sûr de ce que le raccrochage est, j'ai essayé la fonction urlencode/urldecode et htmlentities, pensant peut-être qu'un personnage a été mutilé à la demande, mais pas de différence.
Est-il autre chose que je suis absent? Peut-être un rembourrage?
Grâce
source d'informationauteur julio
Vous devez vous connecter pour publier un commentaire.
Il arrive que votre texte crypté va ressembler à ça:
Voir qui signe là? Les signes Plus dans les Url sont transformés en espaces.
Quand manuellement la conversion qui signe plus à un espace et à décrypter le résultat, le résultat est le corrompu cochonneries que vous avez été témoin.
Vous devez exécuter à la fois le IV et le texte crypté par
rawurlencode
(pasurlencode
) avant de les coller dans le lien. Cela va coder le signe plus, qui permettra de préserver à travers le processus. Vous n'avez pas à (et ne doivent)urldecode
la chaîne de l'autre côté -- PHP aura fait pour vous.