Base64 | это... Что такое Base64? (original) (raw)
Base64 буквально означает — позиционная система счисления с основанием 64. Здесь 64 — это наибольшая степень двойки (26), которая может быть представлена с использованием печатных символов ASCII. Эта система широко используется в электронной почте для представления бинарных файлов в тексте письма (транспортное кодирование). Все широко известные варианты, известные под названием Base64, используют символы A-Z, a-z и 0-9, что составляет 62 знака, для недостающих двух знаков в разных системах используются различные символы.
Содержание
- 1 Схема соответствия «символ ↔ значение» в Base64
- 2 MIME
- 3 UTF-7
- 4 IRCu
- 5 Применение в веб-приложениях
- 6 Radix-64
- 7 Другие применения
- 8 См. также
- 9 Ссылки
- 10 Ресурсы
Схема соответствия «символ ↔ значение» в Base64
Символ | Значение | Символ | Значение | Символ | Значение | Символ | Значение | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10 | 8 | 16 | 10 | 8 | 16 | 10 | 8 | 16 | 10 | 8 | 16 | ||||
A | 0 | 00 | 00 | Q | 16 | 20 | 10 | g | 32 | 40 | 20 | w | 48 | 60 | 30 |
B | 1 | 01 | 01 | R | 17 | 21 | 11 | h | 33 | 41 | 21 | x | 49 | 61 | 31 |
C | 2 | 02 | 02 | S | 18 | 22 | 12 | i | 34 | 42 | 22 | y | 50 | 62 | 32 |
D | 3 | 03 | 03 | T | 19 | 23 | 13 | j | 35 | 43 | 23 | z | 51 | 63 | 33 |
E | 4 | 04 | 04 | U | 20 | 24 | 14 | k | 36 | 44 | 24 | 0 | 52 | 64 | 34 |
F | 5 | 05 | 05 | V | 21 | 25 | 15 | l | 37 | 45 | 25 | 1 | 53 | 65 | 35 |
G | 6 | 06 | 06 | W | 22 | 26 | 16 | m | 38 | 46 | 26 | 2 | 54 | 66 | 36 |
H | 7 | 07 | 07 | X | 23 | 27 | 17 | n | 39 | 47 | 27 | 3 | 55 | 67 | 37 |
I | 8 | 10 | 08 | Y | 24 | 30 | 18 | o | 40 | 50 | 28 | 4 | 56 | 70 | 38 |
J | 9 | 11 | 09 | Z | 25 | 31 | 19 | p | 41 | 51 | 29 | 5 | 57 | 71 | 39 |
K | 10 | 12 | 0A | a | 26 | 32 | 1A | q | 42 | 52 | 2A | 6 | 58 | 72 | 3A |
L | 11 | 13 | 0B | b | 27 | 33 | 1B | r | 43 | 53 | 2B | 7 | 59 | 73 | 3B |
M | 12 | 14 | 0C | c | 28 | 34 | 1C | s | 44 | 54 | 2C | 8 | 60 | 74 | 3C |
N | 13 | 15 | 0D | d | 29 | 35 | 1D | t | 45 | 55 | 2D | 9 | 61 | 75 | 3D |
O | 14 | 16 | 0E | e | 30 | 36 | 1E | u | 46 | 56 | 2E | + | 62 | 76 | 3E |
P | 15 | 17 | 0F | f | 31 | 37 | 1F | v | 47 | 57 | 2F | / | 63 | 77 | 3F |
MIME
В формате электронной почты MIME base64 — это схема, по которой произвольная последовательность байт преобразуется в последовательность печатных ASCII символов. Это определяет MIME как транспортное кодирование содержимого для использования в электронной почте. Используются только символы латинского алфавита в верхнем и нижнем регистре — символы (A—Z, a—z), цифры (0—9), и символы «+» и «/», с символом «=» в качестве специального кода суффикса.
Полная спецификация этой формы base64 содержится в RFC 1421 и RFC 2045. Эта схема используется для кодирования последовательности октетов (байт). Это соответствует определению файлов почти во всех системах. Результирующие закодированные по base64 данные имеют длину, большую оригинальной в соотношении 4:3, и напоминают по виду случайные символы.
Для того, чтобы преобразовать данные в base64, первый байт помещается в самые старшие восемь бит 24-битного буфера, следующий в средние восемь и третий в младшие значащие восемь бит. Если кодируется менее чем три байта, то соответствующие биты буфера устанавливаются в ноль. Далее каждые шесть бит буфера, начиная с самых старших, используются как индексы строки «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/» и её символы, на которые указывают индексы, помещаются в выходную строку. Если кодируются только один или два байта, в результате получаются только первые два или три символа строки, а выходная строка дополняется двумя или одним символами «=». Это предотвращает добавление дополнительных битов к восстановленным данным. Процесс повторяется над оставшимися входными данными.
Например, исторический слоган Википедии,
Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.
будучи закодированным в base64 выглядит следующим образом:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0 aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1 c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0 aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=
UTF-7
UTF-7 представляет собой систему, называемую Изменённый Base64. Эта схема кодирования данных используется для того, чтобы кодировать UTF-16 как промежуточный формат в UTF-7 в печатных ASCII символах. Этот вариант base64 используется в MIME. UTF-7 предназначен для того, чтобы позволять использовать unicode в e-mail без использования разделения транспортного кодирования содержимого. Главное отличие этого варианта base64 от MIME в том, что символ «=» не используется для дополнения, так как требуется многократное экранирование этого символа. Вместо этого биты октета дополняются нулями.
Изменённый Base64 стандартизирован по RFC 2152, A Mail-Safe Transformation Format of Unicode.
IRCu
В сервер-сервер протоколе, используемом в IRCu IRC демоном и совместимом программном обеспечении, версия base64 используется для кодирования клиент/серверных числовых и двоичных IP адресов. Клиентские и серверные числовые данные имеют фиксированные размеры, которые точно совпадают с количеством знаков base64, тем самым, нет необходимости в дополнении. Двоичные IP-адреса для соответствия расширяются ведущими нулевыми битами. Набор символов незначительно отличается от MIME использованием [] вместо +/.
Применение в веб-приложениях
Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Hibernate, библиотека, реализующая базу данных-хранилище для Java-объектов, использует Base64 для того, чтобы закодировать относительно большой идентификатор (как правило, 128-битный UUID) в строку, чтобы использовать его как параметр в HTTP-формах или в запросах HTTP GET URL. Также многим приложениям необходимо кодировать двоичные данные, для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком-наблюдателем природы данных.
Использование URL-кодировщика над стандартом Base64, несмотря на это, неудобно, так как он преобразует символы '/' и '+' в специальные шестнадцатеричные последовательности. Если позднее эта строка используется вместе с базой данных или через гетерогенные системы, они прекращают работу на символе '%', сгенерированном URL-кодировщиком (потому что символ '%' также используется в ANSI SQL как шаблон).
По причине этого, существует изменённый Base64 для URL,где не используется заполнение символом '=' и символы '+' и '/' соответственно заменяются на '*' и '-', так, чтобы использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах, и идентификаторах объекта вообще. Стандартом Base64-кодирования URL адресов, признается вариант, когда символы '+' и '/' заменяются, соответственно, на '-' и '_' (RFC3548, раздел 4).
Другой вариант называется изменённый Base64 для регулярных выражений использует '!-' вместо '*-' для того, чтобы заменить стандартный Base64 '+/', потому что оба '+' и '*' могут быть зарезервированы для регулярных выражений (отметим, что '[]' используемый выше в IRCu варианте может не работать в этом контексте).
Имеются другие варианты, которые используют '_-' или '._', если строка Base64 должна быть использована вместе с идентификаторами для программ, или '.-' для использования в токенах имён XML (Nmtoken), или '_:' в более ограниченных идентификаторах XML (Name).
Radix-64
Radix-64 — разновидность кодирования Base64 двоичных данных в текстовый формат, используемая в PGP. От Base64 отличается тем, что в конец добавляется контрольная сумма в 24 бита.
Другие применения
Существует множество вариантов применения Base64. Например, Thunderbird и Mozilla использовали Base64 для сокрытия паролей в POP3. Base64 часто используется как рациональный метод в безопасности для скрытия секретов без издержек на криптографическое управление ключами.
Сканеры спама, которые не декодируют сообщения в base64, часто пропускают сообщения в Base64, так как они кажутся достаточно случайными, или не содержат ключевые слова в тексте Base64, чтобы быть принятыми за спам. Это используют спамеры для обхода основных антиспамовых инструментов.
См. также
Ссылки
- RFC 1421 (Privacy Enhancement for Electronic Internet Mail)
- RFC 2045 (MIME)
- RFC 4648 (The Base16, Base32, и Base64 кодирование данных)
- Реализация base16-подобной кодировки на PHP, Java, AS3
- Base64 исходный код на C
- Base64 исходный код на Java
Ресурсы
- Online Base64 кодер/декодер
- Base64 декодер с графическим интерфейсом пользователя (Windows)
- мультиплатформенный Base64 кодер/декодер
- Онлайн кодировщик изображений в Base64
- онлайн Base64, HEX, Binary, и т. д. кодер/декодер
- Онлайн кодер/декодер base64 на языке JavaScript
- Base64 файл кодер/декодер (hu)-(en)
- Внедрение картинки (данных) в HTML-код
- Base64 файл кодер/декодер (de)-(en)