Какова реальная цель кодирования Base64?


83

Зачем нужна кодировка Base64? Я новичок и действительно не понимаю, зачем вам запутывать байты во что-то еще (если только это не шифрование). В одной из книг я читал, что кодирование Base64 полезно, когда двоичная передача невозможна. Например. Когда мы публикуем форму, она кодируется. Но почему мы конвертируем байты в буквы? Не могли бы мы просто преобразовать байты в строковый формат с пробелом между ними? Например 00000001 00000004,? Или просто 0000000100000004без пробела, потому что байты всегда попадают в пару по 8?


11
Потому что вы просто превратили 1 байт в 8, а не 3 в 4, как вы это делаете с base64 (если память мне не изменяет). Пропускная способность конечна.
Брайан Роуч

Вы путаете биты (из 8 бит вы делаете байт) и байты, которые могут входить в любую группу.
Denys Séguret

Ответы:


109

Base64 - это способ кодирования двоичных данных в набор символов ASCII, известный практически каждой компьютерной системе, для передачи данных без потери или изменения самого содержимого. Например, почтовые системы не могут работать с двоичными данными, потому что они ожидают данные ASCII (текстовые). Поэтому, если вы хотите передать изображение или другой файл, он будет поврежден из-за того, как он обрабатывает данные.

Примечание: кодирование base64 НЕ является ни способом шифрования, ни способом сжатия данных. Фактически, фрагмент данных в кодировке base64 в 1,333… раз больше, чем исходный фрагмент данных. Это только способ убедиться, что никакие данные не будут потеряны или изменены во время передачи.


5
Данные в кодировке Base64 точно в 1,333 (3) раза больше, чем исходные данные + дополнительные 0–3 дополнительных символа в зависимости от длины входных данных по модулю 4. Это потому, что каждый символ в кодировке base64 хранит 6 бит информации (64 различных символа). .
тоже

2
как до, так и после данные остаются двоичными. тогда почему данные
теряются

12

Base64 - это механизм, позволяющий представлять и передавать двоичные данные на носителях, допускающих только печатные символы. Это наиболее популярная форма «базовой кодировки», другие известные в использовании - это Base16 и Base32.

Потребность в Base64 возникла из-за необходимости прикреплять двоичный контент к электронным письмам, таким как изображения, видео или произвольный двоичный контент. Поскольку SMTP [RFC 5321] допускал в сообщениях только 7-битные символы US-ASCII, возникла необходимость в представлении этих двоичных потоков октетов с помощью семи-битных символов ASCII ...

Надеюсь, это ответит на вопрос


3

Base64 - это более или менее компактный способ передачи (фактически, кодирования, но с целью передачи) любых двоичных данных.

См. Http://en.wikipedia.org/wiki/Base64

«Общее правило - выбрать набор из 64 символов, который одновременно является частью подмножества, общего для большинства кодировок, а также пригоден для печати».

Это очень общая цель, и общая потребность - не тратить больше места, чем необходимо.

Исторически это основано на том факте, что существует общее подмножество (почти) всех кодировок, используемых для хранения символов в байтах, и что многие из 2 ^ 8 возможных байтов рискуют потерять или преобразовать во время простой передачи данных (например, копирование- последовательность paste-emailsend-emailreceive-copy-paste).

(пожалуйста, перенаправьте свой голос на комментарий Брайана, я просто сделаю его более полным и, надеюсь, более понятным).


Нет, еще рано, и мне не хотелось вдаваться в подробный ответ. Это хорошо.
Брайан Роуч,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.