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