Почему строка в кодировке base64 имеет знак = в конце - PullRequest
268 голосов
/ 02 августа 2011

Я знаю, что такое кодировка base64 и как рассчитать кодировку base64 в C #, однако я несколько раз видел, что при преобразовании строки в base64 в конце появляется =.

Возникло несколько вопросов:

  1. Всегда ли строка base64 заканчивается =?
  2. Почему в конце добавляется =?

Ответы [ 8 ]

236 голосов
/ 02 августа 2011

Служит заполнением .

Более полным ответом является то, что строка в кодировке base64 не всегда заканчивается =, она будет толькооканчивается одним или двумя =, если они необходимы для заполнения строки до нужной длины.

208 голосов
/ 12 апреля 2016

1-Нет

2- В качестве краткого ответа: 65-й ​​символ (знак "=") используется только в качестве дополнения в конечном процессе кодирования сообщения.

У вас не будет знака '=', если ваша строка имеет кратное число из 3 символов, потому что кодировка Base64 занимает каждый три байта (8 бит) и представляет их как four печатаемых символов в стандарте ASCII.

Подробности:

(a) Если вы хотите закодировать

ABCDEFG <=> [ABC] [DEF] [G

Base64 будет иметь дело (производя 4 символа) с первым блоком и вторым (по мере их завершения), но для третьего он добавит двойной == в вывод для того, чтобы завершите 4 необходимых символа. Таким образом, результат будет QUJD REVG Rw == (без пробела)

(b) Если вы хотите кодировать ...

ABCDEFGH <=> [ABC] [DEF] [GH

Точно так же он добавит только один = в конце вывода, чтобы получить 4 символа результат будет QUJD REVG R0g = (без пробела)

64 голосов
/ 02 августа 2011

Из Википедия :

Последняя последовательность '==' указывает, что последняя группа содержала только один байт, а '=' указывает, что она содержала два байта.

Таким образом, это своего рода заполнитель.

15 голосов
/ 21 февраля 2014
  1. Нет.
  2. Для дополнения строки в кодировке Base64 длиной до 4 символов, чтобы ее можно было правильно декодировать.
14 голосов
/ 02 августа 2011

Определяется в RFC 2045 как специальный символ заполнения, если в конце закодированных данных доступно менее 24 бит.

11 голосов
/ 02 августа 2011

Знак равенства (=) используется в качестве заполнения в некоторых формах кодирования base64. В статье Википедии на base64 есть все детали.

8 голосов
/ 21 сентября 2013

Это набивка. От http://en.wikipedia.org/wiki/Base64:

Теоретически, дополнительный символ не требуется для декодирования, так как количество пропущенных байтов можно рассчитать из числа Base64 цифры. В некоторых реализациях символ заполнения является обязательным, в то время как для других это не используется. Один случай, в котором символы заполнения требуется объединить несколько файлов в кодировке Base64.

7 голосов
/ 15 февраля 2015

http://www.hcidata.info/base64.htm

Кодирование «Мария была» в базу 64

В этом примере мы используем простую текстовую строку («Мария была»), но принцип действует независимо от того, чтоданные есть (например, графический файл).Чтобы преобразовать каждые 24 бита входных данных в 32 бита, кодирование Base 64 разбивает 24 бита на 4 порции по 6 бит.Первая проблема, которую мы замечаем, состоит в том, что "Mary" не является кратным 3 байтам - это 8 байтов в длину.Из-за этого последняя группа битов имеет длину всего 4 бита.Чтобы исправить это, мы добавляем два дополнительных бита «0» и запоминаем этот факт, помещая «=» в конце.Если бы текстовая строка для преобразования в Base 64 имела длину 7 байт, в последней группе было бы 2 бита.В этом случае мы добавили бы четыре дополнительных бита «0» и запомнили бы этот факт, поставив «==» в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...