Українська

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

RFC 4648 пояснено: стандарт, який визначає Base64, base32 та base16

· Підземелля

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

бази64 коди

RFC 4648 абстраница: base64, base64url, base32hex, base16
Головна ToolAcre векторна ілюстрація

RFC 4648 є коротким, читабельним документом за виконанням бази64. Ця пост проходить через те, що вона specifies, що вона навмисно залишає себе відкритими, і чому виконання все ще відрізняються.

Два бібліотеки, два відповіді на той же рядок — реальний міжоперабельний головоломка, який тільки стандарт оплачує

Два JavaScript бібліотеки можуть повернути різні базові дані для одного рядка, кожен претендує на виправлення. RFC 4648 чи доступний документ на дванадцяти сторінок, що має бути врегулювати такі незгоди, але виконання все ще відрізняються тим, що RFC навмисно залишає певні рішення до застосування. У статті проходиться через те, що RFC 4648 specifies, що він навмисно делегує до дзвоників, і чому читання стандарта, як тільки вирішує найбільш реальні міжоперабельності головоломки. Інструмент для замка Base64 та декодера включає в себе RFC 4648 тестові вектори, які можна перевірити виконання на прикладі авторитетних прикладів.

RFC 4648 заміщені та консолідовані кілька раніше документів: Base64 від MIME (RFC 2045), Base64 від конфіденційності-Enhanced Mail (додаткова пошта)RFC 1421), base32 від S/MIME (RFC 2630) і base16 з різних джерел. Запори необхідно, тому MIME і PEM кожен мав свій алфавіт і правила, і MIME креслення лінії конфліктів PEM, 64-повітальні блоки. RFC 4648 визначає п'ять сімей кодування в одному місці: base64url, base32, base32hex і base16, кожен з власним алфавітом, правила набивання і прикладом тестових векторів. Базовий64 алфавіт А-З, а-з, 0-9, плюс і в'язкість, в цьому порядку.

Як встановити і встановити вектори — стандартні і URL-безпечні алфавіти, наповнювачі та білосніжне обслуговування

Кожен символ 6 bits; три вхідні байти (24 bits) мапа до чотирьох вихідних символів. Абетка не довільна: вона не дозволяє символів, які відрізняються між EBCDIC і ASCII, уникаючи символів управління, котирування та задню вій, які потрібно буде викинути в рядкові рядки C. Базовий64url варіант замінює плюс з висипом і в'язкою з низицею, щоб уникнути зарезервованих символів у URL і назв файлів. Обидва варіанти однаково дійсні; RFC 4648 укр 2 specifies base64, секція 5 визначає base64url, і додаток має статус, який він використовує.

Падінг з символами рівних приносить вихід на кілька чотирьох символів. Якщо вхід 1 byte (8 bits), вихід - два символи плюс два рівні знаки. Якщо вхід 2 bytes (16 bits), вихід три символи плюс один знак. Якщо вхід є декількома 3 bytes, не потрібно накидатися. Деякі програми, що випромінюють на основі декода, або дозволяють відхиляти на декоді; RFC 4648 укр 3.2 визначає канонічне кодування, як завжди в'язується, але розділ 3.3 ноти, які декодери можуть приймати відсутні накидки для сумісності.

Абетки цього інструменту реалізуються — стандарт Base64 і Base64url; інші бази залишаються поза її межами

Незгода про те, що не погоджується на розмивання: суворий декодер відхиляє відсутні рівні, при цьому lenient приймає його. RFC 4648 явно говорить: символ колодки, що дорівнює відсотках, коли використовується в URL, так що якщо базовий64url вихід використовується безпосередньо в URL параметр, накид не потрібно і слід в'язати. Це вирок є однією з причин URL-безпечний режим і опущення, часто паруються, хоча вони самостійні варіанти. Сектор 5 (base64url) не забороняється набивання; це означає, що загальна практика.

Підрядник, який вибирає базову64url, повинен вирішити, чи потрібен наповнювач для системи прийому. Неальфабет символів у вході ручуються різними декодаторами. RFC 4648 укр 3.1 держави: Впровадження MUST відхилити кодування, якщо він містить символи за межами базового алфавіту. Однак розділ 3.3 ноти MIME База64 (RFC 2045) дозволяє розбиття лінії для 76-загортання та декодери для вугілля MIME повинен пропустити біле місце. Мистецтво RFC відрізняє від строгого декодування (від'єднати всі не альфабет) і MIME-сумісне декодування (коротко-білий простір, відхилення інших символів).

Падінг, не альфабетові символи та канонічне кодування — розділи, які пояснюють більшість знезапереченнями, що не погоджуються з тими особами, які не мають жодних обмежень

Для цього необхідно вибрати, який правило слідувати; стандарт визначає як. Base32 використовує A-Z і 2-7 (32 символи всього), кодування п'яти вхідних байтів (40 bits) до восьми вихідних символів. Замінники Base32hex 0-9 і a-v для алфавітних символів, корисний в контекстах, де краще використовувати літери нижньої колонтитули.

База16 - шістнадцяткова: 0-9 і a-f. Base32 і base32hex мають власні правила набивання в секціях 6 і 7й RFC забезпечує окремі тестові вектори для кожного алфавіту. Більшість розробників потрібно лише базовий64 і базовий64url; base32hex і base16 включено до складу RFC для повноти та для додатків, таких як TOTP секрети (03/22/2019)RFC 4226й DNS кодування.

Вибір додатків, видимих в цій реалізації - обгортання рядків, суворе текстове декодування та обробка помилок

Тестові вектори в RFC 4648 - це заземна правда для перевірки виконання. Закодування рядків f, foo, foob, fooba і foobar виробляє конкретну базову версію64: Zg=, Zm8=, Zm9v, Zm9vYg==, Zm9vYmE= і Zm9vYm Фи. Впровадження, що виробляє різні виходи для цих рядків, невірно. Мистецтво RFC забезпечує еквівалентні вектори тесту для бази32, base32hex і base16. Інструмент для кодування та декодера Base64 включає в себе ці вектори, щоб ви могли перевірити його вихід на стандарт. Лінія обгортання - це MIME не концентрацію, не базовий64 концерн.

RFC 2045 вагінальне дзеркало 76-характерні лінії; RFC 4648 укр 3.1 примітив це в контексті MIME але не робить його вимогою самого base64. Деякі застосунки обгортання 64 символи (оригінальний) PEM стандарт; інші не обгортають на всіх. Хірург RFC 4648 base64 decoder працює тільки на алфавіті і тільки накидка. А.А MIME-сумісний декодер повинен пропустити розриви лінії (CR, LF, CRLF... Додаток за допомогою base64 зовні MIME не додавати розриви рядків, якщо система прийому вимагає їх RFC не визначає обгортання лінії в складі base64.

Приклад роботи: RFC- власні тестові вектори — кодування префіксів «фубара» та їх перевірки в браузері

Білий простір обробки є ще однією точкою варіабельності виконання. RFC 4648 суворі декодери повинні відхиляти неальфабет символів. MIME-залізована base64 (RFC 2045 base64) дозволяє проводити біле місце для форматування. Двох стандартів, які згодні на те, що вихідні байти повинні бути, але відрізняються від того, що вводу діє. Найпопулярніші JavaScript вибір MIME • Супутність і пропуск білого простору; суворе правило рідко використовується в браузерах. Баз64 енкодер і декодер приймає як біле космічне, так і біле (розміщене)MIME) і суворий вхід, що робить вирівняння явною. Канонічний проти. Можливість розщеплення є остаточним основним варіаційним.

Канонічне декодування: RFC 4648 укр 3.2: відхилити неформований наповнювач, відхилити відсутнє начинка, відхиляти неальфабетні символи. Збереження декодування, що використовується в веб-стандартах (the HTML spec називає це длявивка-base64), додає правила: ігнорувати білий простір, приймати відсутні наповнювачі, дозволити випікати і андерсон, як плюс вії, еквівалентні навіть в стандартному режимі base64. JavaScript- кішка () - гинуть; строгий RFC 4648 декодер - строгий. Не виправда, вони виконують різні контексти. Дані про читання програми з користувача або з мережі повинні знати, які правила інші очікування.

Що це не криється — MIME і PEM самі документи, а також API-спеціалізовані мови

Мистецтво RFC листя дев'ять варіантів до застосування: який з п'яти алфавітів, чи потрібно або дозволити насипати, чи потрібно або дозволити білий простір, чи можна лікувати підводний низ, як плюс вії еквіваленти, як звітувати помилки, як впоратися з кінцевим входом, чи приймати відсутні насипання, скільки вихідних байтів виділити, і як сигналізувати обмеження розміру. Ці варіанти пояснюють, чому два RFC 4648 виконання може незгодити з тим самим входом. Читати далі RFC один раз; перевірити вашу реалізацію проти його тестових векторів; стан, який опційує використання вашого додатка; перенапруження тесту з фактичним літцем, не припущеннями.

Розуміння RFC 4648 суперечить більшості базових спорів, оскільки незгода зазвичай не про це RFC сама, але про які варіанти вибрав з кожного боку. Мистецтво RFC досить короткий, щоб читати кінець-до-кінцем в годину. Стандарт визначає алфавіти, забезпечує тестові вектори, попереджає, де необхідно визначитися з виконанням. Інструмент для закріплення та видалення Base64 дозволяє експериментувати з векторами тесту і побачити стандартний алфавіт в дії. Більшість повсякденних базових64 використання не вимагає глибокого RFC знання; але при дебуйнуванні кодування невідповідних або інтеграція з незнайомою API, читання стандарта після видалення лоскі.

Поруч: читати стандарт один раз — як Base64 енкодер і декодер дає вам швидкий спосіб перевірити стандартні вектори тесту алфавіту

RFC 4648 – консолідація десятків практик кодування бази Ad-hoc в одну читану специфікацію. Не визначаємо при використанні base64 (MIME, PEM, JWT, дані УРТ та ін., у кожного є власні характеристики; визначає, що base64 є. При розмежуванні п'яти менторних сімей і ненаданням яких варіантів є канонічний RFC ви можете перевірити, чи правильно виконується реалізація. Уектори початкової точки: якщо ваша реалізація закодує фольгобару і виробляє все інше, ніж Zm9vYmFy RFC говорить про виконання неправильно.

Використовуйте цю владу в контрольній контрольній пункті: закодувати кожну RFC перевірити вектор, порівняти точну літеру, а потім декодувати результат, щоб підтвердити, що оригінальні байти повертаються незмінними. Ця перевірка на основі браузера відокремлює алфавіт або накладну помилку від проблеми, що знаходиться в іншому місці, зберігаючи стандарт, як посилання, а не повторюючи на бібліотеці.