Диапазон действительного символа для кодирования базы 64

Меня интересует следующее:
Есть ли список символов, который будет никогда, как часть базовой кодированной строки?

Например *. Я не уверен, случится ли это или нет. Если исходный вход фактически имел *, поскольку его часть была бы кодирована по-разному?

Ответ 1

Вот что я могу найти: RFC 4648

Он включает эту удобную таблицу:

                  Table 1: The Base 64 Alphabet

 Value Encoding  Value Encoding  Value Encoding  Value Encoding
     0 A            17 R            34 i            51 z
     1 B            18 S            35 j            52 0
     2 C            19 T            36 k            53 1
     3 D            20 U            37 l            54 2
     4 E            21 V            38 m            55 3
     5 F            22 W            39 n            56 4
     6 G            23 X            40 o            57 5
     7 H            24 Y            41 p            58 6
     8 I            25 Z            42 q            59 7
     9 J            26 a            43 r            60 8
    10 K            27 b            44 s            61 9
    11 L            28 c            45 t            62 +
    12 M            29 d            46 u            63 /
    13 N            30 e            47 v
    14 O            31 f            48 w         (pad) =
    15 P            32 g            49 x
    16 Q            33 h            50 y

Таким образом, регулярное выражение, которое соответствует любому символу, который должен никогда отображаться в кодировках Base 64, будет:

[^A-Za-z0-9+/=]

Однако, поскольку ответы на капепы указывают, это только рекомендация. Конкретные реализации могут выбирать другой набор из 64 символов. (На самом деле даже связанный RFC содержит альтернативную таблицу для безопасного кодирования URL и файла, которая заменяет символы 62 и 63 на - и _ соответственно). Поэтому я думаю, что это действительно зависит от реализации, которая создала кодировку.

Ответ 2

Вероятно, вы можете быть в безопасности с другими ответами в большинстве ситуаций, но в соответствии с статьей Википедии на Base64 не должно быть определенного список, на который вы можете положиться:

Конкретный выбор набора символов, выбранного для 64 символов, необходимых для базы, зависит от реализаций.

RFC 4648 упоминает другие алфавиты, такие как "Идентификатор базы данных 64-го уровня и имя файла", где + и / заменяются на - и _.

Здесь таблица вариантов Base64, которые используют разные символы. Имейте в виду, что существуют конкретные правила реализации разделителей строк, которые вы можете найти в одной таблице. Некоторые реализации, такие как Mime, даже позволяют (и игнорировать) символы, которые не находятся в алфавите.

Ответ 3

Base64 содержит только A–Z, A–Z, 0–9, +, / и =. Таким образом, список символов, которые не будут использоваться, - это все возможные символы минус те, что указаны выше.

Для специальных целей возможны также . и _.

Ответ 4

https://en.wikipedia.org/wiki/Base64#Design

Реализация MIME Base64 использует A-Z, a-z и 0-9 для первых 62 значений

Таким образом, по большей части вы должны ожидать только буквенно-цифровые символы. В примерной таблице в этой статье также отображаются "+" и "-"; вряд ли вы увидите '*'.

Вы можете использовать http://www.motobit.com/util/base64-decoder-encoder.asp для преобразования в Base64, например, и для '*' это возвращает "Kg =="