Каков наилучший возможный вариант дополнения char для url-safe и filename-safe base64? - PullRequest
1 голос
/ 18 марта 2009

Заполняющим символом для официальной base64 является '=', который может потребоваться в процентном кодировании при использовании в URL. Я пытаюсь найти лучший символ заполнения, чтобы моя закодированная строка была безопасна как для URL (я буду использовать закодированную строку в качестве значения параметра, такого как id = encodedString), так и для имени файла (я буду использовать закодированную строку) строка непосредственно как имя файла).

Точка ('.') Является популярным кандидатом, она безопасна для URL, но не совсем безопасна для имени файла: Windows не разрешает имя файла, заканчивающееся конечной точкой .

'!' кажется жизнеспособным выбором, хотя я гуглил и никогда не видел, чтобы кто-нибудь использовал его в качестве заполнителя. Есть идеи? Спасибо!

Обновление : я заменил «+» на «-» (минус) и заменил «/» на «_» (подчеркивание) в своей настраиваемой кодировке base64, поэтому «-» или «_» больше не доступен для отступа.

Ответы [ 4 ]

4 голосов
/ 02 июня 2012

Лучшее решение (я провел в прошлом месяце над этой проблемой на веб-сайте отправки электронной почты) - вообще не использовать символ заполнения (=)

Единственная причина, по которой там есть символ заполнения, заключается в «ленивых» декодерах. Вы можете очень легко добавить отсутствующий = -> просто сделать% 4 для текста и вычесть число, которое вы получите от 4, и это то, сколько = вам нужно добавить в конце строки. Вот код C #:

    var pad = 4 - (text.Length % 4);
    if (pad < 4)
        text = text.PadRight(text.Length + pad, '=');

Кроме того, большинство людей, которые делают это, заинтересованы в замене + и / на другие безопасные символы URL ... Я предлагаю:

  • заменить на - / заменить на _

НЕ ИСПОЛЬЗОВАТЬ. так как он может давать сумасшедшие результаты на разных системах / веб-серверах (например, на кодированной строке IIS Base64 не может заканчиваться. или IIS будет искать файл)

2 голосов
/ 18 марта 2009

RFC 2396 незарезервированные символы в URI:

"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

Стоит отметить, однако, что статья Microsoft также гласит: «Не принимайте во внимание регистр символов». Возможно, вам стоит придерживаться базы 16 или 32?

1 голос
/ 06 декабря 2010

В статье Википедии говорится;

модифицированный вариант Base64 для URL существует, где нет дополнения '=' б

0 голосов
/ 18 марта 2009

Я бы пошел с '-' или '_'
Они безопасны для URL и файлов и выглядят более или менее как отступы

...