Base64

Base64 — позиційна система числення з основою 64. Система широко застосовується в електронній пошті для передачі бінарних файлів у тексті листа (транспортне кодування). Всі широко відомі варіанти, відомі під назвою Base64, використовують символи A…Z, a…z і 0…9, що становить 62 знаки, для інших двох знаків в різних системах використовуються різні символи. Основа 64 (26) — це найбільший ступінь двійки, який може бути представлено лише друкованими символами ASCII.

Таблиця кодів Base64[ред. | ред. код]

Таблиця перекодування в формат Base64.

Код Символ Код Символ Код Символ Код Символ
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /


MIME[ред. | ред. код]

Докладніше: MIME

У форматі електронної пошти MIME base64 — спосіб перетворення бінарної послідовності байтів на послідовність друкованих символів ASCII. Використовується для передачі електронною поштою будь-яких даних, що можуть мати спеціальні або не друковані символи. В форматі використовуються лише символи латинського алфавіту у верхньому та нижньому регістрі — символи (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 в електронних листах. Головна відмінність цього варіанту base64 від MIME в тому, що символ "=" не використовується для доповнення, тому що потрібно багаторазове екранування цього символу. Замість цього біти октету доповнюються нулями. Змінений Base64 стандартизований по RFC 2152, A Mail-Safe Transformation Format of Unicode.

IRCu[ред. | ред. код]

У протоколі сервер-сервер, що використовується в IRCu і сумісному програмному забезпеченні, версія base64 використовується для кодування клієнт/серверних числових і двійкових IP-адрес. Клієнтські й серверні числові дані мають фіксовані розміри, які точно збігаються з кількістю знаків base64, тим самим, немає необхідності в додатку. Двійкові IP-адреси для відповідності розширюються провідними нульовими бітами. Набір символів незначно відрізняється від MIME використанням [] замість +/.

Застосування у вебтехнологіях[ред. | ред. код]

Кодування Base64 може бути корисним, якщо в оточенні HTTP використовується інформація, довжина якої нам відома. Hibernate, бібліотека, що реалізує базу даних, або сховище, для Java об'єктів, використовує Base64 для того, щоб закодувати відносно великий ідентифікатор (як правило, 128-бітний UUID) в рядок, щоб використовувати його як параметр в HTTP формах або у запитах HTTP GET URL. Також, багатьом програмам необхідно кодувати двійкові дані, для зручності включення в URL, приховані поля форм, і тут Base64 зручний не лише для компактного подання інформації, але й як ускладнення для стороннього спостерігача, який намагається з'ясувати значення переданих даних.

Використовувати URL-кодувальник над стандартом Base64 буде незручно, тому що він перетворює символи '/' і '+' на спеціальні шістнадцяткові послідовності. Якщо пізніше цей рядок використовується разом з базою даних або через гетерогенні системи, вони припиняють роботу на символі '%', згенерованому URL-кодувальником (тому що символ '%' також використовується в ANSI SQL як шаблон).

Як наслідок цього існує Base58 — змінений 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 часто використовується для вставки двійкових даних у файли XML, використовуючи синтаксис на зразок

<Data encoding="base64">  </Data> 

Прикладом такого використання Base64 кодування може слугувати Firefox, що зберігає значки сайтів в bookmarks.html.

Opera використовує Base64 для збереження вебсторінок в форматі *.mht.

Сканери спаму, які не декодують повідомлення в Base64, часто пропускають повідомлення в Base64, оскільки вони здаються досить випадковими, або не містять ключові слова в тексті Base64, щоб бути прийнятими за спам. Це використовують спамери для обходу основних антиспамових інструментів.

Base64 використовується для приєднання малюнків та інших бінарних файлів у форматі електронних книг FictionBook. Base64 використовується для кодування бінарних файлів, таких як зображення в скриптах, щоб уникнути залежності від зовнішніх файлів. В Data URI можна використовувати Base64 представлення файла. Так, наприклад, фонові зображення можуть бути вказані у файлі каскадних таблиць стилів, як дані: URI, замість того, щоб тримати їх в окремих файлах зображень.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]