Почему строка в кодировке base64 имеет знак = в конце

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

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

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

8 ответов


служит обивка.

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


1-Нет

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

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

детали :

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

ABCDEFG [ABC] [DEF] [G

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

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

ABCDEFGH [ABC] [DEF] [GH

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


с Википедия:

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

таким образом, это своего рода обивка.


  1. нет.
  2. для заполнения строки, закодированной в Base64, несколькими символами длиной 4, чтобы ее можно было правильно декодировать.

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


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


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

кодировка "Mary had" для базы 64

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


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

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