Почему строка с кодировкой 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.