Меня интересует следующее:
Существует ли список символов, которые никогда не встречаются в строке, закодированной с основанием 64?
Например, *
. Я не уверен, произойдет это или нет. Если бы исходный ввод действительно имел *
как часть, это было бы закодировано по-другому?
Диапазон допустимых символов для кодировки base 64
Ответы (4)
Вот что мне удалось обнаружить: 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+/=]
Однако, как указывает ответ kapeps, это всего лишь рекомендация. Конкретные реализации могут выбрать другой набор из 64 символов. (На самом деле, даже связанный RFC содержит альтернативную таблицу для безопасного кодирования URL и имени файла, в которой символы 62 и 63 заменены на -
и _
соответственно). Так что я думаю, это действительно зависит от реализации, которая создала кодировку.
/
являясь частью стандарта, означает, что это нельзя использовать для именования файлов. Кроме того, почему бы не начать с 0
перед A
? Зачем намеренно делать первые десять чисел в базовой системе разными?
- person Aaron Franke; 03.01.2019
/
и +
и специально разработана для обеспечения безопасности имен файлов и URL-адресов.
- person Martin Ender; 03.01.2019
^[A-Za-z0-9+/]+={0,2}$
.
- person Victor; 18.05.2019
Вы, вероятно, в безопасности с другими ответами в большинстве ситуаций, но согласно статье Википедии о Base64 не должно быть определенного списка, на который можно положиться:
Конкретный выбор набора символов, выбранного для 64 символов, необходимых для базы, зависит от реализации.
RFC 4648 упоминает другие алфавиты, такие как "URL и безопасное имя файла. " Базовый алфавит 64, где +
и /
заменены на -
и _
.
Существует таблица вариантов Base64, в которых используются разные символы. Имейте в виду, что существуют специальные правила реализации разделителей строк, которые вы можете найти в той же таблице. Некоторые реализации, такие как Mime, даже допускают (и игнорируют) символы, которых нет в алфавите.
Base64 содержит только A–Z
, a–z
, 0–9
, +
, /
и =
. Таким образом, список символов, которые нельзя использовать, таков: все возможные символы за вычетом упомянутых выше.
Для специальных целей также возможны .
и _
.
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=="
*
на входе будет представлено как*
на выходе, является странным и указывает на серьезную концептуальную путаницу в отношении отношения ввода к выводу.*
может появиться на выходе тогда и только тогда, когда он является членом набора символов base 64 ... независимо от того, что находится на входе. - person Jim Balter   schedule 07.06.2018