[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Альтернатива base64
Rapp_colince
Всем привет. Для межсерверного взаимодействия нужно обмениваться http запросами и, передавать данные в строке URL.
Условия:
1. Протокол http
2. Данные нужно кодировать (против сниферов и логирования на DNS).
3. Идеально подойдет метод base64, но к сожалению его нельзя использовать по условию задачи
4. Метод шифрования должен поддерживать реализацию на PHP и на JS.

Пробовал convert_uuencode(), но с ним возникла следующая проблема. Он перекодирует в набор символов, который нельзя использовать в URL. Кавычки, собаки, двоеточия, ... . Если дополнительно шифровать urlencode(), то при отправки получившегося URL через адресную строку браузера, некоторые поступают в php уже перекодированными, а некоторые - нет. Получается путаница. Также, при некоторых комбинациях, в строке получается последовательность символов %2f, которая блокируется апачем или нджинксом.
В общем, пол дня потратил и понял, что метод слишком капризный.

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

_____________
DedMorozzz
Цитата (Rapp_colince @ 28.10.2015 - 10:30)
Он перекодирует в набор символов, который нельзя использовать в URL. Кавычки, собаки, двоеточия


Реплейсишь все символы которые нельзя юзать в урл на другие. После реплейсишь их обратно
И у бейз64 тоже не все символы можно юзать в урл. Это так, к слову...

так же можешь юзать бейз64 вместе с бинарным видом. Делаешь pack(). Его бейзом и передаёшь.
Другими словами бейз только для передачи будет, а не для конвертации

_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Rapp_colince
Цитата
Реплейсишь все символы которые нельзя юзать в урл на другие

Мне кажется, что получится как-то корявенько. Некоторые символы могу не учесть, некоторые могут появиться в будущих версиях unicode. Хотелось бы универсального решения.

Цитата
так же можешь юзать бейз64 вместе с бинарным видом. Делаешь pack(). Его бейзом и передаёшь.

Спасибо, добрый человек, попробую паковать.

После написания вопроса коллега предложил после urlencode() реплейсить символ % на /. После чего изчезла вероятность получить исключительные комбинации типа %2f на стыке кодированных символов. Также такой URL ничем не обрабатывается и не переводит автоматически символы (например %24 само заменялось на $) И, собственно, задача решена.

_____________
Alchemist
простейший вариант (имхо) - перевести урл в аски коды и передавать в виде строки кодов.
$url = 'https://www.google.com/search?q=%D1%83%D1%80%D0%BB';
$encoded = implode('',array_map('dechex',array_map('ord',str_split($url,1)))); // 68747470733a2f2f7777772e676f6f676c652e636f6d2f7365617263683f713d254431253833254431253830254430254242
$decoded = implode('',array_map('chr',array_map('hexdec',str_split($encoded,2)))); // https://www.google.com/search?q=%D1%83%D1%80%D0%BB
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.