Українська

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

Як Base64 перетворює три байти в чотири символи, крок за кроком

· Як працює

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

бази64 коди Унікод

Біт перегрупування від трьох байтів в чотири 6-бітні індекси
Головна ToolAcre векторна ілюстрація

Баз64 не більше, ніж перегрупування біт: 24 bits в, 4 6-розраховані індекси. Цей пост пролягає через таблицю краєвидів, трохи пересувається і зворотна поїздка так формат зупиняється на чорному ящику.

The string 'TWFu' і слово він приховує — починаючи від реального чотирикутного блоку і запитуючи, де кожен лист прийшов з

Чотири-character Base64 string TWFu decodes до трибайтної послідовності Man. Як три байти стають чотири символи показують, що Base64 не є шифруванням або стисненням, але чистий біт перегрупування. Після того, як ви бачите трохи макета, Base64 вихід припиняється, будучи непрозорим і стає передбачуваним. Ви можете закодувати чоловіка вручну, перевірити його проти TWFu, і зрозуміти, чому Base64 завжди виводить чотири символи на три байти введення.

Магія бази64 - це три байти (24 bits) перегрупувати відмінно в чотири шматки шести біт. Шість бітів представляють 0 до 63, чому алфавіт містить саме 64 символи: A–Z26), а–з (26), 0–9 (10й + й2). Кожен шестигранний роз'єм індексів в алфавіт, щоб зробити один вихідний характер. Реверс однаково чистий: чотири символи індексу в алфавіт, щоб відновити чотири шість-розрядні шматки, які перегрупують в три байти.

Від байтів до 6-бітні індекси — як 24 bits розщеплюється на чотири групи і чому 64 Символи достатньо

Ось чому Base64 відчуває природну скрізь. Візьміть три байти M, a, n в ASCII0кс4Д, 0кс61, 0кс6Е. Напишіть в бінарному: 01001101, 01100001, 01101110. Зареєструвати всі 24 bits: 010011010110000101101110Регрупа в чотири шматки шести біт: 010011 010110 000101 101110. Перевірити як бінарні числа: 19, 22, 5, 46. Індекс в base64 алфавіт (A=)0Б=1, ...З=25, а=26, ...z=51, 0=52, ...9=61, +=62, /=63). Індекс 19 Т, індекс 22 В, індекс 5 Ф, індекс 46 У.

Вихід: TWFu. Індексовий зовнішній вигляд механічний. Базовий абет - послідовність, де має значення позиції: кожна реалізація використовує однакове замовлення A–Z, a–z, 0–9, +, /. Різні замовлення випускають різний вихід; зміна замовлення полягає в тому, як base64url works. У стандартному алфавіті літери верхнього профілю займають індекси 0–25, нижня 26–51, цифри 52–61Спеціальні символи 62–63. Цей замовлення довільний, але фіксований RFC; кожен декодер очікує однакове відображення.

Табличний та індексний вигляд — A–Z, a–z, 0–9, + і / в порядку, і чому питання замовлення для порівняння

Якщо ви пишете алфавіт на папері і ретельно підрахуйте, ви можете вручну кодувати без комп'ютера: подивіться 19, count A B C...T, писати T, повторювати. Перерізи однаково прямі. TWFu, подивіться кожен символ в алфавіті: T 19, У 22, Ф 5У 46. Перетворення в бінарні (відведення нулів для шести біт): 010011, 010110, 000101, 101110Конкатенат: 010011010110000101101110.

Група в три байти вісім біт: 01001101, 01100001, 01101110. Перевірити як десятковий або шестигранний: 77, 97, 110 0кс4Д, 0кс61, 0кс6Е. Перетворення в ASCII: М, а, п. Ви відновили оригінальні трибайти. Ось чому Base64 є реверсивним і чому наповнювач стає необхідно тільки для вводів, які не діляться на три. Base64 кодує точні байти і нічого більше. Encoding Чоловік і кодування байтів (77, 97, 110) є ідентичними операціями; Base64 не знає або піклується про символи, мову або кодування.

Призначений для користувача приклад: кодування 'Man' від руки - бінарний з M, a і n, чотири індекси і чотири вихідні символи

Переглядів байтів. Увімкнення інструменту та видалення окремого концерну: текстовий вхід, як людина переходить через TextEncoder UTF-8 байти. Тих байтів - Base64 вхід. Вихід TWFu є текстом (ASCII символи), але витримує для байтів, не для слова. Різні інструменти читання TWFu відновлює байти (77, 97, 110) і повинні самостійно вирішувати, чи є вони слово, зображення, повідомлення в іншому кодуванні або щось інше.

Великі вводи багато повторів цього візерунка. Р 300-byte файл використовує 300/3 = 100 блоки трьох байтів, кожен став четвертим символом, виробництво 400 вихідних символів. При покладанні останнього блоку, декодер відкидає нульову заливку, а не виготовляючи інший байт. Що межа видно з двобайтним введенням: три корисні індекси виживають, четверта позиція є знаком рівних, і тільки шістьнадцять реконструйованих біт належить до результату.

Відновлення процесу — індексний погляд, трохи фасування і де біти набиваються при декодуванні чотирьох символів до трьох байтів

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

Base64url відрізняється тільки за алфавітом. Індикатори 62 і 63 стати - і замість + і /. Біт-відновлення ідентичний; картографування байтів ідентична; тільки зміни таблиці пошуку. Таким чином, будь-який зсув і маска від стандарта Base64, замінюючи лише дві символи терміналу.

Чому результат – послідовність байтів, не текст — окремий крок, який перетворює байти в UTF-8 Головна

Саме тому RFC 4648 секція 5 описує його як окремий алфавіт, не відрізняється кодування. String TWFu в стандарті Base64 є неоднозначним: це може означати лише показники (19, 22, 5, 46). В base64url, рядок буде потрібно містити - або , щоб відрізняти, і без присутніх, однакові індекси застосовуються.

Помилки в реалізації зазвичай включають в себе помилки в переміщеннях біт або неправильне копіювання алфавіту. За допомогою неправильного замовлення алфавіту виробляють різні виводи, якщо і A були заглушені. Після того, як декодер використовується останній частковий блок (при наявності пудри) може відновити неправильну кількість байтів. The Base64 encoder & decoder використовує стандартний алфавіт і ручки наповнювачі RFC 4648Ви можете вставити будь-який зручний приклад і перевірити роботу.

Що це не кришка — base64url, MIME лінія обгортання і продуктивність великих буферів

Оскільки біт математика є детерміналістичною, будь-яка помилка в ручному кодуванні буде виробляти різний вихід при декодуванні, роблячи помилку негайно. База32RFC 4648 секція 6) подовжує принцип п'ятимісних шматків: 32 символи (A–Z) 2–7), тому п'ять біт вписуються в один характер, і 40 bits (five bytes) regroup в вісім символів. Сама логіка перегрупування застосовується; різниця є алфавітним розміром і послідовно співвідношення вхідних байтів до вихідних символів.

Hexadecimal (base16) використовує вісім з 256 Можливі комбінації символів і карти одного байта до двох символів без перегрупування. Розуміння Base64 як трохи перегрупування робить варіанти концептуально простим: підібрати біти за характер, груповий вхід відповідно, подивіться кожну групу в алфавіті. Коли виснаження Base64, трохи зображення є вашим інструментом. Якщо байти були пошкоджені, зашифрувати їх знову і порівняти вихідний характер за характером. Якщо ви не запевняєте, що байти TWFu містять, декодуйте його і перевірте вихід в шістку.

Takeaway: Base64 є реверсивним перегрупуванням біт — як Base64 енкодер і декодер дозволяє перевірити будь-який зручний блок миттєво в браузері

Баз64 енкодер & decoder показує як символи, так і перегляд шестигранних, що робить простий для перевірки, чи шукаєте текстові байти (не забудьте видалити на легке текст) або бінарні дані (покази як шестигранники і краще зберігаються як байти, не текст). Кроковий процес — байти до біт, біти до індексів, індексів до персонажів — має детерміналістичний, швидкий, водночас в кожному сумісному виконанні. RFC 4648 визначає базову кількість формально-таких заходів, які можуть бути у порівнянні з.

Стандарт specifies абетка, біт макетування, правила накидок і як обробляється обгортання лінії в MIME. Відомий стандарт дозволяє легко перевірити, чи слід видалити його строго (канонічна база64) або приймає варіанти (подача наповнювача або URL-безпечні символи. Багато реальних додатків використовують Base64 злегка по-різному: деякі зміти, деякі використання URL-безпечні символи, деякі обгортання на різні довжини лінії. Бази64 енкодер і декодер ручок варіації автоматично, але стандарт розуміння робить викупівля інтеграційних питань набагато простіше.