Мне нужно зашифровать строку с помощью функции AES_ENCRYPT MySQL, а затем присоединить эту зашифрованную строку до конца URL-адреса, чтобы затем ее расшифровать и использовать с помощью PHP-скрипта на другом конце.
В принципе, я шифрую строку (используя AES_ENCRYPT MySQL), затем я использую функцию rawurlencode () PHP, чтобы сделать ее «безопасной для URL». Затем я передаю зашифрованную строку в URL-адрес, который затем извлекается скриптом PHP на другом конце, где он успешно дешифруется … примерно в 95% случаев.
Кажется, что около 5% строк шифруются таким образом, что они повреждаются где-то в процессе и не могут быть декодированы на другом конце после передачи по URL-адресу. Может кто-нибудь помочь мне здесь? Есть ли 100% -ный способ защиты от дураков? Я также попытался использовать urlencode (), а также base64_encode () в разных комбинациях.
Благодарю.
Решаемые.
Как только я зашифровал строку с помощью функции AES_ENCRYPT MySQL, я использую функцию bin2hex () PHP для преобразования этих зашифрованных данных (которые находятся в двоичной форме) в шестнадцатеричную. Затем я передаю Hexidecimal в виде строки в конце URL-адреса. Как только URL-адрес получен на другом конце, я затем использую эту настраиваемую функцию PHP, чтобы вернуть строку Hex обратно в двоичную:
function hex2bin($data) { $len = strlen($data); return pack("H" . $len, $data); }
Оттуда все, что осталось сделать, это дешифрование данных с помощью функции AES_DECRYPT MySQL и wha-la. Исходная строка успешно восстановлена.
URL-адреса имеют конечную максимальную длину. AES-зашифрованные строки нет.
URL-адреса не являются подходящим вектором для передачи произвольной информации. Использование HTTP POST – намного лучший способ, если вы должны общаться через HTTP.
О том, почему у вас возникают проблемы: цитирование на странице руководства PHP по urlencode
:
Примечание. Будьте осторожны с переменными, которые могут соответствовать объектам HTML. Такие вещи, как & amp, & copy и & фунт, анализируются браузером, и вместо имени требуемой переменной используется фактическая сущность. Это очевидная проблема, о которой W3C рассказывал людям много лет. Ссылка находится здесь: http://www.w3.org/TR/html4/appendix/notes.html#hB.2.2 . PHP поддерживает изменение разделителя аргументов в W3C-предложенную полуточку через директиву arg_separator .ini. К сожалению, большинство пользовательских агентов не отправляют данные формы в этом формате с разделителями с запятой. Более портативный способ заключается в использовании
&
вместо & в качестве разделителя. Для этого вам не нужно изменять arg_separator PHP. Оставьте это как &, но просто закодируйте свои URL-адреса, используя htmlentities () или htmlspecialchars ().