Почему строка в кодировке base64 имеет знак = в конце
Я знаю base64
кодирование и как вычислить base64
кодировка в C#, однако я видел несколько раз, что когда я преобразую строку в base64, есть =
в конце.
возникло несколько вопросов:
- тут
base64
строка всегда заканчивается=
? - почему
=
добавить в конце?
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= (без пробелов)
с Википедия:
последняя последовательность "= = "указывает, что последняя группа содержала только один байт, а" = " указывает, что она содержала два байта.
таким образом, это своего рода обивка.
- нет.
- для заполнения строки, закодированной в 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.