Українська

Розробники · Base64 енкодер & decoder

Коротка історія бази64: від uuencode і PEM до сьогодні алфавіт

· Підземелля

Опубліковано ToolAcre · Редакція журналу

бази64 коди

Часовий ряд з uuencode і PEM через MIME до RFC 4648 Базова64 еволюція
Головна ToolAcre векторна ілюстрація

Бази64 абетка - це викопний запис 1980-х транспортних проблем. Ця пошта ознайомлюється за допомогою конфіденційності MIME і RFC 4648і пояснює кожен вибір дизайну.

Чому алфавіт не просто 0–63 в якомусь явному порядку — питання, що призводить до чотирьох десятиліть

Base64 не з'явився повністю сформований як стандарт. абетка (A-Z, a-z, 0-9, +, /) є викопним записом десятків експериментів кодування, кожен намагається вирішити цю ж проблему: як показати бінарні дані як текст, який виживає 1970-ті роки і 1980-х електронної пошти, USENETІнструменти Unix. Історія пролонгує uuencode на Unix, конфіденційність-Enhanced MailRFC 1421) в 1993, MIME (RFC 2045) в 1996і нарешті RFC 4648 в 2006 консолідація всіх варіантів.

Розуміння цієї історії пояснює, чому певні символи в алфавіті і чому RFC залиште певні варіанти реалізації. uuencode, короткий для кодування Unix-to-Unix, був першим інструментом для вирішення 7- транспортна проблема на Unix. Створено 1980, закодовано кожному 3 bytes (24 bits) в 4 символи з 64-чарівний алфавіт. алфавіт uuencode ASCII 32 (простір) через ASCII 95 (відмова та інші пунктуації), вибрані, оскільки ці символи друкуються на будь-якому терміналі. Репозиторій демонструє алфавіт, який в даний час реалізується, але він не містить архівних доказів про те, хто вибрав цей порядок або чому кожен символ виграв. На заголовку вже вузьким: теперішнє планування можна перевірити саме, а мотиви і дати вимагають первинних історичних документів, які не включені тут.

Чому абетка виглядає історично — межа цього репозиторію не документа

Однак простір як символ кодування є проблематично: текстові редактори та поштові системи обрізають причепи, пошкоджені виведення. алфавіт не був ідеальним, але він добре працював для перенесення файлів Unix-to-Unix. Статус на сервериRFC 1421, 1992) була спроба стандартизувати зашифровану електронну пошту. Включили власне кодування Base64 (Base64 кодування)RFC 1341, для MIME, які RFC 1421 заданий в специфікаціях, але відставлено в прийнятті.

RFC 1421 Base64 використовується алфавіт A-Z, a-z, 0-9, +, / (сучасний базовий алфавіт) і загортання рядків на 64 символи. Цей алфавіт уникає просторів та інших проблемних персонажів; кожен характер неоднозначно друкується і не плутають з кодами управління або національними варіаціями символів. Про нас 64-довжина рядка, яка відповідає ширині паперових терміналів 1980-х і була практичним компромісом для читабельності. Uuencode належить до історії навколишнього середовища, але інструмент ні читає, ні пише його алфавіт. Виконувати його як взаємозамінна база64 буде помилка формату. Корисне порівняння тут обмежено загальною проблемою представлення байтів з друкованими героями.

Попереднє кодування як контекст, що не виконує докази

RFC 1421 не став широко прийнятим для зашифрованої електронної пошти, але його базовий алфавіт. MIME (Мультиціальні розширення електронної пошти, RFC 2045, 1996) прийняти RFC 1421 Base64 абетка, але змінено обгортання лінії з 64 до 76 символи. Причина не була технічної, але історичної: PEM (Приватна пошта) 64 символи та MIME вибрав трохи різний ліміт, щоб уникнути сплутаності з PEM в автоматизованому порядку.

MIME Base64 стала стандартом для вкладення електронної пошти і є найбільш широко використовуваним варіантом Base64 сьогодні. RFC 2045 також визначено інші значення Content-Transfer-Encoding7bit, 8bit, процитовані віддруковані параметри поштових систем на основі типу вмісту. Вибір алфавіту дозволяє уникнути символів, які відрізняються між ASCII і EBCDIC (все) IBM кодування символів основного кадру. Символи A-Z, a-z, 0-9, +, і / однакові в обох кодуваннях. PEM-блоки стилів визнаються, тому що етикетки, що обгорнуті, зашифровані закодованими матеріалами. ToolAcre може обробляти витягнутий корпус Base64 після видалення цих етикеток. Не можна встановити, яка специфікація архіву спочатку використовується дану конвенцію, і ця стаття не попередила відповіді на джерело.

PEM-замовити броню як сучасний спостережний формат, не претендуючи історію походження

Характеристики, як відкриті кронштейни, так і закриті кронштейни, відрізняються між ASCII і EBCDIC, щоб вони були виключені. Це було важливим у 1980-ті роки та на початку 1990-х рр. при передачі даних до Uniix було загальним. Абетка також уникає застібки, однієї цитати і подвійної цитати, які мають особливий значення в рядках C і синтаксису оболонки. A Base64 string може бути вбудований в програму C або скрипт оболонки без викопування практично кожного персонажа.

RFC 3548 (2006) консолідований Base64, base32 та base16 кодування. Він зазначив, що MIME, PEM, і інші додатки, які використовуються, подібні поняття, але з різними правилами та алфавітами. RFC 4648 (2006, опублікований поряд RFC 3548) є чинним стандартом, і він визначає п'ять сімей з тестовими векторами для кожного. Про нас RFC також призначає історію: які документи, визначені, які кодування, які змінилися між версіями, і чому були зроблені варіанти. Анкодер 76- варіант обгортання і видалення білого простору decoder MIME-формовані зразки. Не доведено повної історії стандартів пошти. Вони показують сучасні зчитувачі поведінки сумісності можуть відтворювати безпосередньо в панелі та тестах.

MIME- стиль обгортання як варіант енкодера, без історії реконструкцій стандартів

Більшість розробників зустрічаються тільки base64 і base64url в RFC 4648; історія задокументована тим, хто потребує реалізації старших варіантів. База64url (RFC 4648 секція 5) замінює плюс з висипом і сіткою з підставкою, щоб уникнути URL-збережені символи. Рядок base64, що містить + і / повинен бути процентований в URL (%2Б і %2F); base64url уникає.

JWT (JSON Web Token використовує base64url без наповнювача. Деякі програми використовують base64url з наповнювачем. Про нас RFC визначає як варіанти, так і до програми, які вибрати. Саме тому JWT decoder і email Base64 decoder може виробляти різний вихід для одного і того ж вхідного рядка (один очікує base64url, інші очікує base64). Абетка, правила набивання та обмотування лінії з’являються з практичних обмежень реальних систем. Портабельність краще обробляється як обмеження на транспортні алфавіти, а не перевірена біографія кожного символу. Листи та цифри залишаються візуально знайомими з загальними текстовими системами, тоді як остаточна пунктуація відрізняється в URL-безпечний режим. Точний історичний вибір раціонального без первинних доказів.

Портова мобільність як конструкторський супровід, не перевірений рахунок індивідуальних варіантів вибору

Про нас 64-вибраний набір символів для відображення сумісності з кодуваннями; алфавіт зафіксований RFC 1341 і 1421 і MIME; верховенство 3- вирівнюючи вирівнювання; і обгортання лінії з'явилася з обмеженнями транспорту електронної пошти. Впровадження, яка ігнорує цю історію, може викликати нове кодування або забути крайовий випадок. Про нас RFC 4648 тестові вектори (foobar виробляє Zm9vYmFy) - це спосіб перевірки відповідності стандарту.

Сучасні альтернативи, такі як base85 (використовуються в деяких контекстах) існують, але base64 залишається домінуючим через історичний момент і тому, що він досить хороший. Base64 не є найбільш компактним кодуванням (base85 і base91 щільніше), але це простий, універсальний і перевірений. Що можна сказати міцно - поточна пара абеток: стандартні кінці плюс і вії; URL-безпечні замінники гіфену і низько. Падінг і обгортання є окремими варіантами. Тести охоплюють як режими, так і відсутній наповнювач, що забезпечують відтворювані докази для сучасної поведінки, а не кольорової хронології.

Що доводить репозиторію про поточний стандарт і URL-безпечні алфавіти

Про нас 33 100% розмір накладної прийнятний для більшості випадків. алфавіт стійкий до виконання. Про нас RFC досить зрозуміло, що відхилення зазвичай є свідомими (наприклад, обробка білим простором).

Розуміння історії Base64 пояснює, чому він виглядає таким чином. Символи плюсів і slash були навмисні вибіри, щоб уникнути неоднозначності в різних кодуваннях символів. Синдром набивають з 3-групування. Base85 і Ascii85 використовують різні розміри груп і алфавіти і зовні виконання. Згадувати їх не робить цю сторінку конвертером для них. Порівняти їх щільність або історія вимагатиме джерела та тестові вектори за межами файлів Base64, перевірених на цей модуль.

Відправлення: кожен символ був обраний для причини — як Base64 енкодер & decoder реалізує стандартний абет, що призвело до

Загортання лінії з'явилася з електронної пошти. Кожне рішення було прийнято для вирішення реальної проблеми з реальними системами. Сьогодні Base64 в основному використовується в контексті (JWT, APIs, дані URIs, де історія не має значення, але алфавіт і правила наповнювача успадковані з MIME і PEM через RFC 4648.

Читання RFC один раз і кодування тестового рядка в Base64 енкодер і декодер інструмент підключає даний стандарт до його історичних коренів. Отриманий стандартний алфавіт видно, коли будь-який вхід досягає індексів Sixty-two або sixty-three. Використовуйте зразок, який виробляє ці позиції, окуляри URL-безпечний режим і порівняти тільки змінну пунктуацію. Цей експеримент показує сьогодні формат без релігування на непідтримувані оповідання про його винахідництво.