Почему строка с кодировкой base64 имеет знак = в конце
Я знаю, что такое кодировка base64
и как вычислять base64
кодировку в С#, однако я несколько раз видел, что при преобразовании строки в base64 в конце есть =
.
Пришло несколько вопросов:
- Строка
base64
всегда заканчивается на =
?
- Почему добавляется
=
в конце?
Ответы
Ответ 1
Он служит padding.
Более полный ответ заключается в том, что строка с кодировкой base64 не всегда заканчивается на =
, она будет заканчиваться только одним или двумя =
, если они необходимы для того, чтобы выровнять строку до нужной длины.
Ответ 2
1-Нет
2- В качестве короткого ответа: 65-й символ (знак "=") используется только как дополнение в конечном процессе кодирования сообщения.
У вас не будет знака '=', если ваша строка содержит несколько символов из 3 символов, потому что кодировка Base64
занимает три байта (8 бит) и представляет их как четыре печатных символа в стандарте ASCII.
Подробности:
(a) Если вы хотите кодировать
ABCDEFG <=> [ ABC
] [ DEF
] [ G
Base64
будет обрабатывать (создавая 4 символа) с первым блоком и вторым (по мере их завершения), но для третьего он добавит double ==
в выход, чтобы выполнить 4 необходимых символа. Таким образом, результат будет QUJD REVG Rw == (без пробела)
(b) Если вы хотите кодировать...
ABCDEFGH <=> [ ABC
] [ DEF
] [ GH
Аналогично, он добавит только один =
в конец вывода, чтобы получить 4 символа, результатом будет QUJD REVG R0g = (без пробела)
Ответ 3
Из Википедии:
Конечная последовательность "==" указывает, что последняя группа содержит только один байт, а "=" указывает, что она содержит два байта.
Таким образом, это своего рода дополнение.
Ответ 4
- Нет.
- Вставить строку с кодировкой Base64 в длину длиной до 4 символов, чтобы ее можно было правильно декодировать.
Ответ 5
Определяется в RFC 2045 в качестве специального символа заполнения, если в конце кодированных данных доступно менее 24 бит.
Ответ 6
Знак равенства (=) используется как дополнение в некоторых формах кодирования base64. Статья Википедии на базе64 содержит все подробности.
Ответ 7
http://www.hcidata.info/base64.htm
Кодировка "Мэри" имела базовую 64
В этом примере мы используем простую текстовую строку ( "Mary had" ), но принцип выполняется независимо от того, что такое данные (например, графический файл). Чтобы преобразовать каждые 24 бита входных данных в 32 бита вывода, кодирование Base 64 разбивает 24 бита на 4 куска 6 бит. Первая проблема, которую мы замечаем, состоит в том, что "Mary had" не кратно 3 байтам - это 8 байтов в длину. Из-за этого последняя группа бит имеет длину всего 4 бита. Чтобы исправить это, мы добавим два дополнительных бита '0' и запомним этот факт, положив '=' в конец. Если текстовая строка, которая должна быть преобразована в Base 64, имела длину 7 байтов, последняя группа имела бы 2 бита. В этом случае мы добавили бы четыре дополнительных бита '0' и помним этот факт, положив '==' в конце.
Ответ 8
Это дополнение. Из http://en.wikipedia.org/wiki/Base64:
Теоретически для декодирования не требуется заполняющий символ, поскольку количество отсутствующих байтов можно вычислить из числа Base64 цифры. В некоторых реализациях символ заполнения является обязательным, а для других он не используется. Один случай, когда символы заполнения требуется объединить несколько закодированных файлов Base64.