Какую схему кодирования текста вы используете, когда у вас есть двоичные данные, которые вам нужно отправить по каналу ascii?

StackOverflow https://stackoverflow.com/questions/2090009

  •  21-09-2019
  •  | 
  •  

Вопрос

Если у вас есть двоичные данные, которые вам нужно закодировать, какую схему кодирования вы используете?

Я знаю о:

  • Шестнадцатеричная кодировка.Очень просто, но довольно многословно, расширяет один байт до двух.
  • База 64.Самый распространенный, не такой многословный вариант, расширяет три байта до четырех.
  • База 85.Необычно, опять же менее многословно, расширяет четыре байта до пяти.

Существуют ли другие широко используемые схемы кодирования?Если да, то каковы преимущества и недостатки?

Редактировать:Это полезно, например, при попытке сохранить произвольные данные в файле cookie.Файлы cookie могут хранить только текст, а не произвольные данные, поэтому вам необходимо каким-то образом преобразовать их, желательно с возможностью обратного преобразования.Далее предположим, что вы используете сервер без сохранения состояния, поэтому вы не можете сохранить состояние на сервере и просто помещаете идентификатор в файл cookie.Конечно, если вы сделаете это, вам также понадобится какой-то способ проверить, что то, что пользователь передает вам, — это то, что вы передали пользователю, например подпись.

Кроме того, поскольку в настоящее время существует мнение, что вам следует использовать base64, поскольку он широко распространен, я также отмечу, что это является чем я пользуюсь...Мне просто любопытно, использовал ли кто-нибудь что-нибудь еще, и если да, то почему.

Редактировать:На всякий случай, если кто-то наткнется на это, если вы хотите использовать Base64 для хранения данных в файле cookie, вам нужно использовать модифицированная реализация Base64.Видеть этот ответ по той причине, почему.

Это было полезно?

Решение

При кодировании значений файлов cookie необходимо соблюдать осторожность.Видеть это старый ответ:

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

Кодировка Base64 может генерировать = символы для определенных входных данных, и это технически не разрешено в файлах cookie (во всяком случае, файлы cookie версии 0, которые поддерживаются наиболее широко).На практике я подозреваю, что = на самом деле будет работать нормально, но, возможно, и нет.

Я бы посоветовал, чтобы быть абсолютно уверенным, что ваш закодированный двоичный файл совместим с файлами cookie, тогда наиболее безопасным является базовое шестнадцатеричное кодирование (например, в Яве).

редактировать: Как любезно отметил @Paul, существует модифицированная версия Base 64 это «безопасно для URL» (и, я полагаю, «безопасно для файлов cookie»).Заметьте, использование модифицированной версии стандартного алгоритма несколько ослабляет его очарование.

редактировать:@shoosh отметил, что = используется только для обозначения конца строки base64, поэтому вы можете обрезать =, установите файл cookie, затем повторно прикрепите = снова, когда вам нужно его декодировать.

Другие советы

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

Когда-то была UTF-7.Официально он устарел, но по-прежнему работает как ACE (кодировка, совместимая с ASCII).Теперь есть ИДИ.

Base64 является стандартом де-факто.Использование чего-либо еще вызывает проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top