Warning: session_name(): Cannot change session name when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 231

Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 232
======Base64====== **Base64** буквально означает — [[позиционная-система-счисления|позиционная система счисления]] с основанием 64. Здесь 64 — это число символов в [[алфавит-формальный-язык|алфавите кодирования]], из которого формируется конечный буквенно-цифровой текст на основе латинского алфавита. Число соответствует наибольшей степени двойки (26), которая может быть представлена с использованием печатных символов [[ascii|ASCII]]. Эта система широко используется в [[электронная-почта|электронной почте]] для представления бинарных файлов в тексте письма ([[транспортное-кодирование|транспортное кодирование]]). Все широко известные варианты, известные под названием Base64, используют символы A-Z, a-z и 0-9, что составляет 62 знака, для недостающих двух знаков в разных системах используются различные символы. =====Схема соответствия «символ — значение» в Base64===== {| ! rowspan="2"| Символ ! style="padding-left:0.5em;padding-right:0.5em" colspan="4"| Значение | rowspan="18"| ! rowspan="2"| Символ ! style="padding-left:0.5em;padding-right:0.5em" colspan="4"| Значение | rowspan="18"| ! rowspan="2"| Символ ! style="padding-left:0.5em;padding-right:0.5em" colspan="4"| Значение | rowspan="18"| ! rowspan="2"| Символ ! style="padding-left:0.5em;padding-right:0.5em" colspan="4"| Значение |- ! 10 ! 2 ! 8 ! 16 ! 10 ! 2 ! 8 ! 16 ! 10 ! 2 ! 8 ! 16 ! 10 ! 2 ! 8 ! 16 |- | A | 0 | 000000 | 00 | 00 | Q | 16 | 010000 | 20 | 10 | g | 32 | 100000 | 40 | 20 | w | 48 | 110000 | 60 | 30 |- | B | 1 | 000001 | 01 | 01 | R | 17 | 010001 | 21 | 11 | h | 33 | 100001 | 41 | 21 | x | 49 | 110001 | 61 | 31 |- | C | 2 | 000010 | 02 | 02 | S | 18 | 010010 | 22 | 12 | i | 34 | 100010 | 42 | 22 | y | 50 | 110010 | 62 | 32 |- | D | 3 | 000011 | 03 | 03 | T | 19 | 010011 | 23 | 13 | j | 35 | 100011 | 43 | 23 | z | 51 | 110011 | 63 | 33 |- | E | 4 | 000100 | 04 | 04 | U | 20 | 010100 | 24 | 14 | k | 36 | 100100 | 44 | 24 | 0 | 52 | 110100 | 64 | 34 |- | F | 5 | 000101 | 05 | 05 | V | 21 | 010101 | 25 | 15 | l | 37 | 100101 | 45 | 25 | 1 | 53 | 110101 | 65 | 35 |- | G | 6 | 000110 | 06 | 06 | W | 22 | 010110 | 26 | 16 | m | 38 | 100110 | 46 | 26 | 2 | 54 | 110110 | 66 | 36 |- | H | 7 | 000111 | 07 | 07 | X | 23 | 010111 | 27 | 17 | n | 39 | 100111 | 47 | 27 | 3 | 55 | 110111 | 67 | 37 |- | I | 8 | 001000 | 10 | 08 | Y | 24 | 011000 | 30 | 18 | o | 40 | 101000 | 50 | 28 | 4 | 56 | 111000 | 70 | 38 |- | J | 9 | 001001 | 11 | 09 | Z | 25 | 011001 | 31 | 19 | p | 41 | 101001 | 51 | 29 | 5 | 57 | 111001 | 71 | 39 |- | K | 10 | 001010 | 12 | 0A | a | 26 | 011010 | 32 | 1A | q | 42 | 101010 | 52 | 2A | 6 | 58 | 111010 | 72 | 3A |- | L | 11 | 001011 | 13 | 0B | b | 27 | 011011 | 33 | 1B | r | 43 | 101011 | 53 | 2B | 7 | 59 | 111011 | 73 | 3B |- | M | 12 | 001100 | 14 | 0C | c | 28 | 011100 | 34 | 1C | s | 44 | 101100 | 54 | 2C | 8 | 60 | 111100 | 74 | 3C |- | N | 13 | 001101 | 15 | 0D | d | 29 | 011101 | 35 | 1D | t | 45 | 101101 | 55 | 2D | 9 | 61 | 111101 | 75 | 3D |- | O | 14 | 001110 | 16 | 0E | e | 30 | 011110 | 36 | 1E | u | 46 | 101110 | 56 | 2E | + | 62 | 111110 | 76 | 3E |- | P | 15 | 001111 | 17 | 0F | f | 31 | 011111 | 37 | 1F | v | 47 | 101111 | 57 | 2F | / | 63 | 111111 | 77 | 3F |} =====MIME===== В формате электронной почты [[mime|MIME]] **base64** — это схема, по которой произвольная последовательность [[байт]] преобразуется в последовательность печатных [[ascii|ASCII]] символов. Это определяет [[mime|MIME]] как транспортное кодирование содержимого для использования в электронной почте. Используются только символы [[латинский-алфавит|латинского алфавита]] в верхнем и нижнем регистре — символы (A—Z, a—z), цифры (0—9), и символы «+» и «/», с символом «=» в качестве специального кода суффикса. Полная спецификация этой формы base64 содержится в [[https://tools.ietf.org/html/rfc1421|RFC 1421]] и [[https://tools.ietf.org/html/rfc2045|RFC 2045]]. Эта схема используется для кодирования последовательности [[октет-информатика|октетов]] ([[байт]]). Это соответствует определению файлов почти во всех системах. Результирующие закодированные по base64 данные имеют длину, большую оригинальной на 33 %, а именно, в соотношении 4:3 (каждым 3 байтам оригинального текста соответствуют 4 символа base64), и напоминают по виду случайные символы. Для того, чтобы преобразовать данные в 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.//// будучи перекодированным из ASCII в base64, выглядит следующим образом: TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0 aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1 c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0 aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4= В примере, слово Man закодировано как TWFu. Процесс преобразования можно представить в виде следующей таблицы: {| ! | Исходный текст | style="text-align:center;" colspan="8"| **M** | style="text-align:center;" colspan="8"| **a** | style="text-align:center;" colspan="8"| **n** |- ! | Коды ASCII | style="text-align:center;" colspan="8"| 77 (0x4d) | style="text-align:center;" colspan="8"| 97 (0x61) | style="text-align:center;" colspan="8"| 110 (0x6e) |- ! | Двоичный вид | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |- ! | Полученный индекс в Base64 | style="text-align:center;" colspan="6"| 19 | style="text-align:center;" colspan="6"| 22 | style="text-align:center;" colspan="6"| 5 | style="text-align:center;" colspan="6"| 46 |- ! | Конечный результат в Base64 | style="text-align:center;" colspan="6"| **T** | style="text-align:center;" colspan="6"| **W** | style="text-align:center;" colspan="6"| **F** | style="text-align:center;" colspan="6"| **u** |} =====UTF-7===== [[utf-7|UTF-7]] представляет собой систему, называемую **Изменённый Base64**. Эта схема кодирования данных используется для того, чтобы кодировать [[utf-16|UTF-16]] как промежуточный формат в UTF-7 в печатных [[ascii|ASCII]] символах. Этот вариант base64 используется в MIME. UTF-7 предназначен для того, чтобы позволять использовать [[unicode]] в e-mail без использования разделения транспортного кодирования содержимого. Главное отличие этого варианта base64 от MIME в том, что символ «=» не используется для дополнения, так как требуется многократное экранирование этого символа. Вместо этого биты октета дополняются нулями. Изменённый Base64 стандартизирован по [[https://tools.ietf.org/html/rfc2152|RFC 2152]], //A Mail-Safe Transformation Format of Unicode//. =====Base58===== Для кодирования [[url|URL]] в некоторых системах используется Base58, отличающийся от Base64 отсутствием в конечном тексте символов, которые могут восприниматься человеком неоднозначно. Исключены **0** (ноль), **O** (заглавная латинская **o**), **I** (заглавная латинская **i**), **l** (маленькая латинская **L**). Также исключены символы **+** (плюс) и **/** (косая черта), которые при кодировании [[url|URL]] могут приводить к неверной интерпретации адреса. =====IRCu===== В сервер-сервер протоколе, используемом в [[ircu|IRCu]] [[irc-демон|IRC демоном]] и совместимом программном обеспечении, версия base64 используется для кодирования клиент/серверных числовых и двоичных IP адресов. Клиентские и серверные числовые данные имеют фиксированные размеры, которые точно совпадают с количеством знаков base64, тем самым, нет необходимости в дополнении. Двоичные IP-адреса для соответствия расширяются ведущими нулевыми битами. Набор символов незначительно отличается от MIME использованием [] вместо +/. =====Применение в веб-приложениях===== Кодирование Base64 может быть полезно, если в окружении HTTP используется информация, длину которой можно точно определить. Также многим приложениям необходимо кодировать двоичные данные для удобства включения в URL, скрытые поля форм, и здесь Base64 удобно не только для компактного представления, но и относительной нечитаемостью для попытки выяснения случайным человеком-наблюдателем природы данных. Использование URL-кодировщика над стандартом Base64, несмотря на это, неудобно, так как он преобразует символы '/' и '+' в специальные шестнадцатеричные последовательности. Если позднее эта строка используется вместе с базой данных или через гетерогенные системы, они прекращают работу на символе '%', сгенерированном URL-кодировщиком (потому что символ '%' также используется в ANSI SQL как шаблон). По причине этого существует **изменённый Base64 для URL**,где не используется заполнение символом '=' и символы '+' и '/' соответственно заменяются на '*' и '-', так что использование кодеров/декодеров URL перестаёт быть необходимым и не имеет никакого воздействия на длину закодированного значения, оставляя ту же самую закодированную форму, неповреждённую для использования в реляционных базах данных, веб-формах и идентификаторах объекта вообще. Стандартом Base64-кодирования [[url|URL]] адресов признается вариант, когда символы '+' и '/' заменяются, соответственно, на '-' и '_' ([[https://tools.ietf.org/html/rfc3548|RFC 3548]], раздел 4). Другой вариант называется **изменённый Base64 для регулярных выражений**, использует '!-' вместо '*-', для того, чтобы заменить стандартный Base64 '+/', потому что оба '+' и '*' могут быть зарезервированы для [[регулярные-выражения|регулярных выражений]] (отметим, что '[]', используемый выше в IRCu варианте, может не работать в этом контексте). Имеются другие варианты, которые используют '_-' или '._', если строка Base64 должна быть использована вместе с идентификаторами для программ, или '.-' для использования в токенах имён [[xml|XML]] (//Nmtoken//), или '_:' в более ограниченных идентификаторах XML (//Name//). В некоторых случаях для URL применяется [[base58|Base58]], который не использует символы '+/'. =====Radix-64===== Radix-64 — разновидность кодирования Base64 двоичных данных в текстовый формат, используемая в [[pgp|PGP]]. От Base64 отличается тем, что в конец добавляется [[контрольная-сумма|контрольная сумма]] в 24 бита. ====Radix-64 применения, не совместимые с Base64==== Операционные системы семейства [[unix|Unix]] сохраняют вычисленные с помощью [[crypt-c|crypt]] хеши паролей в файл [[passwd-утилита|/etc/passwd]] используя кодировку //B64//. Она похожа на radix-64, но суффикс выравнивания «=» не используется и в алфавите небуквенные символы расположены вначале: ''./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz''. =====Другие применения===== Существует множество вариантов применения Base64. Например, [[thunderbird|Thunderbird]] и [[mozilla|Mozilla]] использовали Base64 для сокрытия паролей в [[pop3|POP3]]. Base64 часто используется как рациональный метод в безопасности для сокрытия секретов без издержек на криптографическое [[управление-ключами|управление ключами]]. Сканеры [[спам|спама]], которые не декодируют сообщения в base64, часто пропускают сообщения в Base64, так как они кажутся достаточно случайными, или не содержат ключевые слова в тексте Base64, чтобы быть принятыми за спам. Это используют спамеры для обхода основных антиспамовых инструментов. =====См. также===== * [[uue|UUE]] * [[ascii85|Base85]] =====Ссылки===== * [[https://tools.ietf.org/html/rfc1421|RFC 1421]] (Privacy Enhancement for Electronic Internet Mail) * [[https://tools.ietf.org/html/rfc2045|RFC 2045]] (MIME) * [[https://tools.ietf.org/html/rfc4648|RFC 4648]] (Base16, Base32, и Base64 кодирование данных) * [[http://base64.sourceforge.net/|Base64 исходный код на C]] * [[http://iharder.sourceforge.net/base64/|Base64 исходный код на Java]] * [[http://Base64.ru|Base64 онлайн генератор и декодер]] \\ {{tag>"Стандарты Интернета" "Форматы данных"}}