Розробники · Base64 енкодер & decoder
Base64 роз'яснення: що означає = знаки і коли вони потрібні
· Як працює
Опубліковано ToolAcre · Редакція журналу
бази64 коди розробник-workflow

= в кінці рядка Base64 не прикраса: вона записує скільки байтів остання група була короткою. Цей пост пояснює арифметичне, чому деякі рядки не мають, і чому декодери незгодні про відсутні.
Виняток «некоректного наповнювача» від токена, який виглядав дрібно — невірний декод і один або два відсутні символи за ним
У випадку, коли Base64 decoder звітує про неправильне наповнення, рядок виглядає завершено, але несе структурну помилку. Визначні знаки не косметичні: кожен зашифрує, скільки байтів остаточна група була короткою, що дозволяє декодер точно знати при досягненні реальних даних. Розуміння тих = знаків, і чому суворі декодери відхиляють рядки без них — перетворюють таємничу похибку на передбачувану арифметметметику. Р JWT сегмент може мати один =, ні, ні два. Анжела API відповідь може призвести до чистоти без наповнювача.
Вони являють собою навмисні вибірки, що не виконують варіанти. Процес декодування не вимагає механічної обробки. Накладка існує для того, щоб зробити вихід неоднозначним: заданий тільки рядок Base64 без метаданих про довжину, декодер читає наповнювач і знає точно, де дані закінчуються. Base64 кодує групи трьох байтів у чотири символи. Три байти 24 bits, перегрупування ідеально в чотири 6-місні індекси; кожен забирає один з 64 Базові64 символи. При введенні не кілька трьох, енкодер стикається з лівоверами: один або два байти не можна розділити рівномірно на три.
Групи трьох байтів, блоків чотирьох персонажів — чому довжина входу modulo 3 вирішує, чи з’являються нулі, один або два = знаки
У першому індексі вводять енкодерні диски, залишаючи фінальну нульову. Для того, щоб відзначити цей навмисний, він придатків = знаки: нуль для повних груп, один для двобайтних фіналів, два для однобайтних фіналів. Arithmetic – детерміністична: знаючи тривалість введення в байтах дозволяє негайно спрацювати. Один байт виробляє два символи Base64 плюс два =. Два байти виробляють три символи плюс один =. Три байти випускають чотири без наповнювача.
Будь-який вхід не буде багато трьох байтів; будь-який, що це кілька не буде. Це не вибір — це арифметичне. Рядок без накипу повинен представляти три байти. Рядок з однією рівністю повинен представляти два. Накладка кодів вхідної довжини модуля три. Дослідження перетворення трьох вводів: одинарний, парний ab, потрійний abc. ASCII a is byte 0x61; base64 кодує його як 0x61 00 00, перегрупування в шість-бітні групи.
Які біти містяться і чому суворий декодер перевіряє їх — біти, які повинні бути нульовими і якими засобами канонічного кодування
Індикатори 24, 4, 0, 0 мапа до Я, Е, А, А. Тому що дві групи були наповнювачі, енкодер отримує два = знаки, що виробляє YQ=. Для ab, bytes 0x61 0x62 став 0x61 0x62 00. Bits перегрупування індексів 24, 22, 8, 0, вихід YWI=. Для abc, перегрупування байтів до індексів 24, 22, 9, 35, вихід YWJj без наповнювача. Падінг не довільний: він випадає з біт макета. Коли ви декодуєте рядок Base64, декодер прочитає кожен характер, виглядає його шестигранний індекс, упакує біти в байти.
Для YQ==, символи Y, E, A, розпакування для біт. Перегрупування в вісім-бітних байтах дає один байт, 0x61. Декодер відкидає набивні біти (приблизні нулі) і звітує один байт. Якщо ні, вхід не був канонічний, значить, хтось закодований за допомогою різних макетів біт і декодування є неоднозначним. Системи змітування повністю роблять навмисні торгові марки. JWT сегменти використовують Base64url без наповнювача, спираючись на споживачі, які знають очікувану довжину виходу або посилюючи її.
Призначений для користувача приклад: кодування 'a', 'ab' і 'abc' від руки - три входи, три наповнювачі результати, показано біт
RFC 4648 дає можливість приймати її в разі наявності. Бібліотеки коду розрізняються: деякі відновляться відсутні і продовжать; інші не будуть. Коли ви зіткнулися з токенами, які не відмовляються від декодування, застосувавши праву кількість = знаків часто закріплює її. Необхідно = знаки завжди нуль, один або два, в залежності від довжини рядка модуло чотири. Якщо довжина основного рядка Base64 не є декількома з чотирьох, набивання точно відсутній або пошкоджений.
Довжина 5 не може бути дійсним Base64: кожен повнометражний кодує шість біт, тому чотири символи кодують 24 bits (три байти), п'ять кодів 30 bits, яка не є кількома восьми і не може стати байтами. Знижувач повинен відхиляти це або додати начинку. Якщо довжина 2 Модуло 4, додати два =. Якщо 3 Модуло 4, додати один =. Якщо 0 Модуло 4, додати ні. Рядок довжини 3 не має його = вона потребує; додати один і він стає дійсним до декодування.
Чому деякі системи знижуються повністю — JWT сегменти і URL-безпечні токени, які omit = і як відновити її з довжини
Розгортання двох підкладених підвалів Base64 зламаний, якщо на місці залишається насип. Два окремих кодів долучилися безпосередньо виготовляти символи променя, які розбиває алфавіт. Ось чому деякі системи смугового наповнювача перед конкатенуванням: токен складається з трьох сегментів Base64url, що доходять до точок, не має наповнювачів в сегментах, що робить конкатен прямоперед. Якщо побудувати значення Base64 від деталей, перевірте, чи є кожна частина веслована і смуга або додається послідовно перед будь-якими операціями.
The Base64 енкодер & декодер RFC 4648, яка вимагає накипу за замовчуванням. Коли ви вводите текст і запит base64 вихід, інструмент виробляє прокладений результат: канонічна форма. Якщо ви бачите Base64 без наповнювача і хочете декодувати його, перевірте, чи приймається ваш декодер відсутній наповнювач. Інструмент приймає як прокладений, так і неочищений вхід і правильно відновлює оригінальні байти. Для відбілювання, підрахунку довжини модуло чотири говорить вам, чи було роздягання, і формула говорить про те, що наповнювач повинен бути присутнім.
Загальні помилки: обрізка = якби він був білим простором, або захоплюючи два підкладені рядки — як кожен пошкоджений декод
Base32 і Base16 (hexadecimal) мають різні правила наповнення, визначені в RFC 4648 секція 6 і 7. Base32 використовує = але остаточна група може бути 2, 4, 5, 7або 8 символи в залежності від довжини входу модуло п'ять. Hexadecimal не вимагає наповнювача; він завжди копіює один байт до двох символів без залишку. MIME Базовий64 обгортання торкнень: 76-згорнути загорнутий рядок все ще має накидатися на самому кінці, відразу кілька рядків пізніше.
Розуміння наповнювача для Base64 полягає в розумінні макета біт і довжини входу модуло три; один раз ви бачите арифметметику, наповнювач стає прямим наслідком, не правильним для запам'ятовування. Падінг є непристойним, не чарівним.
Що це не кришка — base32 і base16 синопти, і MIME конвенції довжини лінії
Враховуючи базовий рядок будь-якої довжини, можна відновити канонічну форму, розділивши кількість символів на чотири, приймаючи решту, і застосувавши відповідну кількість = знаків. Саме тому відсутній = фіксується і чому суворі декодери можуть бути запобіжні: насипання несе інформацію (який відділ трьох випадків, коли ваш вхід впав), але це інформація може бути комп'ютерна від довжини окремо.
Base64 енкодер & decoder показує вихід, що ви повинні порівняти декодовані байти до оригінального тексту і перевірити роботу круглої поїздки. Base64 і пов'язані кодування подовжують принцип перегрупування біт в різні ширини символів. RFC 4648 Визначає всі три, і розуміння, що робить інші концептуально простими. Ключова інсайта полягає в тому, що кодування є чистою біт маніпуляцією: підібрати розмір алфавіту, групувати біт відповідно, подивіться кожну групу в таблиці.
Веслування: Оббивка неприпустимо, так що відсутні = виправити — як Base64 енкодер & decoder показує, що веслована канонічна форма будь-якого тексту, який ви закодили
Декодування зворотнього зв'язку: подивіться кожен символ, витяг біт, перегрупувати їх, писати байти. Цей детерміністичний двосторонній картографування є те, чому Base64 працює надійно по всій платформі та мовах. Помилки в кодуванні і декодуванні часто слідують непорозумінню насипних або алфавітних відмінностей. Якщо декод не збігається з похибками, перевірте, чи очікується декодер канонічна база64 (обмежено обмежено) або приймає варіанти. Якщо він не збігається з помилками символів, перевірте, чи є вхід base64url і decoder очікує стандарт Base64.
Base64 encoder & decoder приймає як абетки, так і діє відповідно, так що будь-який зручний приклад може бути перевірений миттєво. Тестування кодування, декодування його назад є обов'язковим способом ловити помилки, перш ніж вони викликають проблеми виробництва.