Українська

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

Чому паста Base64 не вдається декодувати: обгортання рядків, нові лінії та смарт-ролики

· Чому це питання

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

бази64 коди

Підсумок Base64 перед і після видалення лінійних розривів, обрізання білого простору і ремонту струнації
Головна ToolAcre векторна ілюстрація

Base64 рідко перервається в транзиті; вона розбиває в буфері. Цей пост каталоги копіювальні несправності, які виробляють недійсними і похибки довжини і як швидко помітити кожен.

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

Інженер скопійував API ключ від терміналу для тестування його в скрипті. Ключ працював в терміналі, але не вдалося з недійсним характером при заданні в інструмент браузера. Через два години після пошуку за допомогою коду, конфігурації та документації, вони виявили один невидимий характер. Нова лінія в кінці ключа, додана echo або скопійована з терміналної лінії підказки, стала додатковим характером, який зламав Base64 декодер. Ключ був правильним, буфер не був. Базові дані надійно передаються в електронному вигляді, перевірені та перевірені. Він розбиває майже виключно при ручному копіюванні та переробці.

Лінія обгортання в терміналах, причіпаючи нові лінії від командного виходу, смарт-цитувати заміщення в багатих текстових редакторах і прихованих символів Unicode від копіювання-paste між різними додатками, всі вводять помилки, які виглядають як Base64, розбиті, коли фактична проблема в тому, як це було скопійовано. Цей каталог розміщує найбільш поширені несправності і показує, як швидко помітити і зафіксувати кожен. Базовий алфавіт складається з літер верхнього та нижнього регістру, цифр, знаків плюсів, вії та символу набивання (рівень знака). RFC 4648 є специфічним: стандартний рядок Base64 містить лише ті символи плюс додаткові білий простір, якщо лінії загортаються.

Лінія обгортання від терміналів, клієнтів електронної пошти та PEM форматування — чому 76-попередження для деяких декодаторів і жирних для інших

Багато інструментів переносять відхилення: вони приймають URL-безпечні варіанти з використанням дашів і низів замість плюсів і slash, або ігнорують нові лінії. Швидке декодер, що випливає з RFC відхиляється від будь-якого за межами очікуваного символу і не несеться з недійсною помилкою. Повідомлення про помилку зазвичай іменує вихідний характер або ноти, які рядок не може бути декодовано у всіх. При бронюванні Base64 з електронної пошти, терміналу, історії чату або форматованого документа, невидимих символів або заміщення символів часто ковзають і викликають декодування. Самі дані дрібні, буфер обміну пошкоджені його.

Лінія обгортання є найбільш поширеним джерелом минулих базових збоїв Base64, а також найбільш легко фіксованих. Комплектуючі для обгортання терміналів 76 символи на лінії або іноді 80, вставляємо нову лінію і продовжуємо на наступному рядку. Багато енкодерів, в тому числі деякі бібліотеки Base64-encoding, загортають їх вихід в одному 76-обмінний крайовий край для сумісності з MIME електронна пошта. Коли ви копіюєте рядок Base64 з терміналу, нові лінії поставляються.

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

Деякі декодери автоматично приймають і ігнорують нові лінії. Відхилити їх недійсними символами. Фіксація полягає в видаленні всіх нових ліній і білого простору. Якщо рядок Base64 загортається по декількох лініях в терміналі, виберіть всі лінії, скопіюйте їх в редактор і видаліть всі нові лінії.

Скопіюйте отриману один рядок і вставте її в декодер. Це перше, що потрібно спробувати, коли паста не виходить. Витрачаючи нові лінії від електронних і буферних утиліт є ще одним загальним кульпритом. Команда echo $API_KEY друкує ключ, який слідує новим рядком, який є типовою поведінкою команди. Якщо ви копіюєте, що вихід безпосередньо, нова лінія включена в копію. Деякі термінали додають додаткову нову лінію, коли ви копіюєте, і деякі менеджери з кнопок зберігають або дублюють нові лінії. Симптом є те ж, що і обгортання лінії: додатковий характер в кінці рядка, яка не належить в Base64.

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

Виправлення однаково проста: обрізати кінці заданого рядка в редакторі перед спробою декодування. Видаліть провідний і причіпний білий простір і будь-які символи, які виглядають як нові лінії. Якщо рядок досить короткий, ви можете вручну ввести його знову, але для довгих ключів, обережні ручні обрізки швидше. Розумні котирування, нерозривні місця та інші заміни Unicode є тонкими пастками. Багаті текстові редактори, такі як Word автоматично перетворюють прямі лапки на фігурні котирування, перетворюйте три гіфени на ем-даш і перетворюйте певні послідовності простору на нерозривні місця. Якщо хтось вставляє рядок Base64 в документ, а потім скопіювати його з форматованого документа в інструмент, ті заміни приходять разом.

Пряма подвійна цитата () стає кучерявою лівою і правою парою, ні з якої діє Base64. Нерозривний простір (U+00A0) виглядає ідентично регулярному просторі, але має різний код персонажа і не визнається білим простором за допомогою всіх parsers. Розчин полягає в тому, щоб вставити звичайний текстовий редактор першим, який відхиляє всі форматування. Якщо ви вставляєте з документа Word або відформатований чат, спочатку вставте в звичайний текстовий редактор або HTML Текстура і перевірка непарних символів. Потім скопіюйте від звичайної текстової версії для використання у вашому інструменті.

Втрата і втрата наповнювача — довжина-модуло-4 перевірити, що говорить вам символи відсутні

При копіюванні або бронюванні відбувається працевлаштування. Дуже довгий ряд Base64 може перевищити межі буфера на деяких системах або не копіювати через помилки додатків. В результаті виходить коротший рядок, який неповний. A Base64 string повинен мати довжину, яка є декількома з чотирьох після накидування. Якщо довжина не є декількома з чотирьох, вона обрізається або пошкоджена. Повідомлення про помилку, як правило, зазначає, що довжина рядка недійсна або що символ відсутній. Фіксація вимагає знати, що було скопійовано спочатку.

Якщо ви знову можете перевірити джерело, скопіюйте його. Якщо ні, то не розкривається. Падинг втрата є пов'язаним питанням: Base64 оббивка з рівними знаками іноді смужена для збереження декількох байтів. Деякі додатки, які зажадають її за допомогою. Якщо рядок був спочатку прокладений і було втрачено, додайте його назад. Рядок Base64 повинні мати 0, 1 або 2 причіпні рівні знаки, такі що загальна довжина є декількома з чотирьох. Якщо вона не має, а довжина не є декількома з чотирьох, наповнювач може бути втрачена.

Ведуться роботи: ремонт загортання і обтягнутої нитки — очищення його кроку до декодування

Приклад роботи показує ці ремонти крок за кроком. Припустимо копію API Ключові слова: VGhpcyBub3QgcmVhbGx5IGEgc2VjcmV0Cg==. Почати виявлення питань. Причіп Cg== є непарним; Cg є base64 для нового символу (hex 0A), а додатково == пропонує щось додано. Видалити причіп Cg== і спробуйте просто VGhpcyBub3QgcmVhbGx5IGEgc2VjcmV0. Що ще не правильно; довжина 37 символи, не кілька з чотирьох. Трим знову: VGhpcyBub3QgcmVhbGx5IGEgc2VjcmV035 символи, як і раніше неправильно. Перевірити оригінальне джерело. Виправити рядок - VGhpcyBub3QgcmVhbGx5IGEgc2VjcmV0 (32 символи) з належним наповнювачем: VGhpcyBub3QgcmVhbGx5IGEgc2VjcmV0. Додати його: VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0=.

Тест в декодері. Цей декоди для Це не дуже секрет. На кожному кроці використовуйте Base64 енкодер і декодер, щоб перевірити поточний рядок, зафіксувати ідентифікований номер і перевірити знову до тих пір, поки він не декодує. Корупція всередині самої бази64 байт не фіксується декодером. Якщо байти фактично пошкоджені в транзиті, передачі або зберігання, Base64 не можна виявити його. Про нас RFC визначає дійсні символи; будь-який символ зовні, який встановлюється, щоб зловити роботу. Будь-яка корупція, як 0 стати 1 в середині базового символу Base64 виробляють різні коди персонажа повністю і невизначають лише Base64.

Що це не криється — корупція всередині зашифрованих байтів, які Base64 не можна виявити

Перевірити або цифрові підписи використовуються для виявлення такого роду корупції, і вони повинні бути налаштовані на оригінальні бінарні дані перед кодуванням Base64. Якщо ви декодуєте рядок Base64 і результат є сміттям або відрізняється від того, що ви очікували, корупція сталася перед кодуванням або під час передачі, не під час копіювання кроку. Це рідко в практиці. Найвища відмова – це питання, як і раніше. Системний підхід до відключення Base64 копіювання-paste несправностей полягає в тому, щоб перевірити кожен потенційний номер. По-перше, видаліть всі білі місця і нові лінії. Після чого обрізають провідні і причіпні місця і будь-які промені персонажі.

Потім перевірте довжину модуля 4 і додайте начинку, якщо потрібно. Вставте кожну версію в Base64 енкодер & decoder і див., якщо він decodes. Якщо довжина перевіряється невдачі, запитайте, чи був рядок, і отримайте його з початкового джерела. Якщо перевірка алфавіту не вдається і ви бачите незвичайні символи, подивіться на смарт-ролики або заміщення Unicode і замініть їх за допомогою ASCII еквіваленти. Використовуйте онлайн-інструмент, який показує вам недійсні символи за назвою, щоб ви могли виявити та видалити їх. Base64 encoder & decoder робить це для кожного недійсного персонажа, що означає, що характер не в алфавіті.

Поруч: перевірити довжину і алфавіт перед відключенням даних — як Base64 енкодер & decoder дає вам швидке локальне місце, щоб перевірити кожен ремонт

Використовуйте цей зворотний зв'язок для фіксації кожного символу і продовження до тих пір, поки рядок декодує. Профілактика легше відключення. Коли ви знаєте, що вам потрібно рядок Base64 знову, скопіюйте його таким чином, що зберігає форматування. Не вставте його в багатий текстовий документ. Зберігайте його у звичайному текстовому файлі або позначеному тексті, який не робить замін. Якщо хтось надсилає вам рядок Base64 у форматі відформатоване повідомлення, попросіть їх перезапустити його у форматування коду або звичайний текст. Якщо ви повинні копіювати з відформатованого джерела, вставте в звичайний текстовий редактор першим і перевірте рядок перед його використанням.

Випробуйте рядок в Base64 енкодері та декодер, як тільки у вас є, перш ніж покластися на неї. Якщо це не вдається, ви можете попросити свіжу копію, тоді як джерело ще доступна. Якщо ви дочекаєтеся до того, як рядок старий або вихідний, закріплюєте обрізку або корупцію стає неможливим. Base64 encoder & decoder надає вам швидкий локальне місце, щоб перевірити будь-який рядок, перш ніж використовувати його. Тест рано і тест часто так скопіювати несправності.