Intereting Posts
Как генерировать подобные случайные кривые? Данные PHP SESSION, потерянные между загрузками страниц с WAMPserver 2.0 на localhost Доступ к глобальной переменной в «CSS» (style.php) PHP Добавление двух часов к дате в заданные часы с использованием функции Свойства PHP Readonly? Установить переменную сеанса с помощью javascript Zend Framework 2 – AJAX Запрос с другого сервера Можем ли мы взломать сайт, который просто сохраняет имя пользователя в качестве переменной сеанса? Форматирование числа с ведущими нулями в PHP Невозможно перечислить данные в приложении для Android от Mysql Заполнение поля ввода поиска с использованием PHP со значениями из таблицы MySQL PHP получает разницу между двумя массивами объектов Удаление полей из excel с использованием phpexcel после запроса MYSQL laravel 4 artisan – как откат к определенному состоянию миграции? Как сохранить содержимое textarea при обновлении страницы PHP?

PHP: JSON не работает при использовании urldecode и mcrypt

Когда я запускаю json-код через json_decode, он отлично работает, но когда я шифрую mcrypt и кодирую urlencode, тогда декодируем и расшифровываем, он не работает.

Кто-нибудь знает, что случилось?

Расшифрованный json выглядит как json, прежде чем зашифровать.

Мой код:

<? $json = '{"entry1":{"name":"bob","age":"15"},"entry2":{"name":"bill","age":"50"}}'; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = "abcdefghijkl"; $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $json, MCRYPT_MODE_ECB, $iv); $urlencoded = urlencode($encrypted); $urldecoded = urldecode($urlencoded); $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $urldecoded, MCRYPT_MODE_ECB, $iv); // json and decrypted json comparison echo "<h3>JSON & Decrypted JSON look the same:</h3>"; echo $json . " // json<br>"; echo $decrypted . " // decrypted json<br>"; // json - works! echo "<h3>JSON works:</h3>"; $data = json_decode($json); $i = 1; while ($i <= 2) { $entrynumber = "entry" . $i; echo "name ----- " . $data->$entrynumber->name . "<br>"; echo "age ------- " . $data->$entrynumber->age . "<br>"; $i++; } // decrypted json - doesnt work! echo "<h3>Decrypted JSON doesnt work:</h3>"; $data = json_decode($decrypted); $i = 1; while ($i <= 2) { $entrynumber = "entry" . $i; echo "name ----- " . $data->$entrynumber->name . "<br>"; echo "age ------- " . $data->$entrynumber->age . "<br>"; $i++; } ?> 

Если вы вставляете этот код в документ php, вы увидите, что я имею в виду.

Скриншот:

введите описание изображения здесь

Ваш алгоритм шифрования / дешифрования добавляет дополнение для соответствия размеру блока. Вы должны удалить нулевые символы с конца, например:

rtrim($decrypted, "\0");

Некоторые проблемы были устранены, и вот что я получил:

URL-код Кодирование / декодирование не является проблемой. Строка перед кодированием и после декодирования одинакова:

Перед кодированием:

 string 'è?¡OùpU4ˆß•ý£ÉGÒô½åLqe 2w¨”—Ô¢§|MþWþxÎZ±8“єЩɓ ŽšÁkèíSòøÓ€¥ðÒ(³!§¬žIê\&' (length=96) 

После декодирования:

 string 'è?¡OùpU4ˆß•ý£ÉGÒô½åLqe 2w¨”—Ô¢§|MþWþxÎZ±8“єЩɓ ŽšÁkèíSòøÓ€¥ðÒ(³!§¬žIê\&' (length=96) 

Проблема заключается в процессе шифрования / дешифрования.

Строка Json перед шифрованием:

 string '{"entry1":{"name":"bob","age":"15"},"entry2":{"name":"bill","age":"50"}}' (length=72) 

Строка Json после дешифрования:

 string '{"entry1":{"name":"bob","age":"15"},"entry2":{"name":"bill","age":"50"}}                        ' (length=96) 

См. Дополнительные символы мусора, добавленные в конец.

После дешифрования, если вы сделаете это, чтобы обрезать символы мусора, ваш json декодирует штраф:

 json_decode(substr($decrypted,0,72)); 

Я не очень хорошо знаком с mcrypt , поэтому, надеюсь, кто-то может помочь вам понять, почему вы получаете дополнительные символы в конце.