Когда я запускаю 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
, поэтому, надеюсь, кто-то может помочь вам понять, почему вы получаете дополнительные символы в конце.