Отправка строки, зашифрованной mcrypt, с помощью параметра URL-адрес - декодированный текст искажен


Я путаюсь с простой схемой авторизации. Я думаю, что самый простой способ сделать это без SSL или другой аутентификации HTTP - это шифрование с общим ключом. Адаптируя простой пример из руководства по PHP, я пришел к следующему:

$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 />';

Страница, на которую поступает этот запрос(temp2.php ) выглядит так:

$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>";

Это очень близко, но оно не расшифровывается должным образом - оно повторяет

boggles the invisible monkey will rule t—;eôügJë

Я не уверен, в чем причина зависания, я попробовал urlencode/urldecode и htmlentities, думая, что, возможно, персонаж был искажен в запросе, но никакой разницы.

Есть ли что-то еще, чего я не понимаю? Может быть, обивка?

Спасибо

Author: julio, 2011-04-22

1 answers

Бывает, что ваш зашифрованный текст в конечном итоге будет выглядеть примерно так:

Z5DlBqT8yEB4HKLkAlvfJoWaHgnNVLFh7jls6L85sLriedc82uFQxm+M62I41oB7

Видишь вон тот знак плюс? Плюс знаки в URL-адресах превращаются в пробелы.

При ручном преобразовании этого знака плюс в пробел и расшифровке результата выводится поврежденный мусор, который вы видели.

Вы должны запустить как IV, так и зашифрованный текст через rawurlencode ( нет urlencode) прежде чем вставить его в ссылку. Это позволит правильно закодировать плюс знак, который сохранит его в течение всего процесса. Вам не нужно (и не должно) urldecode строка с другой стороны - PHP сделает это за вас.

 29
Author: Charles, 2011-04-22 17:12:48