Декодер ланцюжків кодувань

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

Вперше тут? Ланцюжки кодування простою мовою — що таке шар, чому кодування — не шифрування і чому важливий порядок кроків.
Застосовувати шар самостійно, лише коли впевненість не менша за:
Зупинитися після
Виконує ліміт шарів вище за один раз. Та сама таблиця будується в будь-якому випадку, тож ви можете перейти до покрокового режиму в будь-який момент.
Або оберіть техніку вручну:
Цей список — те, що сторінка може побачити в тексті просто зараз. Шифри ротації завжди в ньому, бо їх взагалі неможливо виявити; так само будь-що, що стає розпізнаваним лише після вилучення пробілів із перенесеного тексту, позначено як таке і ніколи не застосовується саме по собі.
Це введення довше за те, що ця сторінка любить запускати без питання, і оцінка вище каже, що це може зайняти . Натисніть Розгорнути весь ланцюжок ще раз, щоб продовжити попри це, або спершу скоротіть текст.
(спершу введіть або вставте щось)
(ланцюжок з'явиться тут)
Що таке ланцюжок кодування і навіщо йому власний декодер?

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

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

Кодування — не шифрування, і ця сторінка нічого не ламає. Кожна техніка на цій сторінці — це публічний, оборотний спосіб записати ту саму інформацію. У Base64 немає ключа. У відсотковому кодуванні немає ключа. Якщо найвнутрішніший шар зашифровано, ця сторінка розгорне зовнішні шари і видасть вам шифротекст, і скаже про це прямо, а не вдаватиме результат. Тут нема чого запускати і нічого приховувати.
Розібрані приклади на цій сторінці

Кожен рядок нижче — справжнє введення з файлу даних цієї сторінки, а середній стовпець — це те, що знаходить власний розгортач сторінки. Останній стовпець — текст, що лишився, коли він зупиняється.

Що є введенням Знайдені шари Введення, цитоване як надійшло Лишилося, коли зупинилося

Ці рядки формує сама сторінка зі свого списку випадків і перезапускає при кожному відвідуванні, тож вони не можуть розійтися з тим, що робить код. Нижчий самотест перевіряє кожен із них.

Як сторінка вирішує, який шар зняти
  1. Дивіться на форму, а не на значення. Кожна техніка має сигнатуру — відсоткове екранування, парний ряд шістнадцяткових цифр, алфавіт і довжину, що пасують до Base64. Сторінка перелічує кожну техніку, чия сигнатура збігається з текстом, із впевненістю від 0 до 1.
  2. Декодуйте, потім перевірте, чи результат — текст. Техніка варта застосування, лише якщо вона дає щось читабельне. Кожного кандидата справді виконують, а його вивід оцінюють за тим, яка частина його — друковані символи.
  3. Застосовуйте лише те, що проходить поріг, у порядку впевненості. Застосовується кандидат з найвищою впевненістю вище порогу, і процес повторюється на результаті. Нижче порогу техніки перелічуються, але не застосовуються.
  4. Одне правило, яке сторінка додає зверху. Навіть коли техніка проходить поріг, ця сторінка не застосує її сама по собі, якщо результат не є справді читабельним текстом — символи заміни і керуючі символи йдуть проти нього. Без цього правила звичайне слово cafe було б коректно декодовано як три байти, що друковані лише в Latin-1, а getUserName — як вісім байтів шуму. Детектор правий, що ці рядки пасують до алфавіту; ця сторінка вирішує, що пасування до алфавіту недостатнє. Ви все одно можете застосувати їх вручну, а список кандидатів повідомить, що вона відмовилася і чому.
  5. Зупинитися свідомо. Коли жодна техніка не проходить поріг, коли текст перестає змінюватися, коли досягнуто ліміту кроків або коли наступний крок повернув би текст, що вже з'являвся в цьому ланцюжку. Останнє важливо: ROT13 є своєю оберненою функцією, тож ланцюжок, що дозволяє зробити цей крок двічі, ніколи б не закінчився.
  6. Перенесений текст пропонується, але ніколи не застосовується. Якщо текст розрізано на кілька рядків, детектор бачить пробіли, читає звичайну прозу і нічого не знаходить. Тому сторінка вилучає пробіли з копії тексту, знову запитує детектор і пропонує все знайдене як крок, який обирають вручну. Вилучення пробілів з вашого тексту — це переписування вашого тексту, а ця сторінка нічого не переписує без вашого прохання.
Чого ця сторінка не робитиме
Воно лише декодує, і нічого більше. Вставлений вами текст ніколи не виконується: ні eval, ні new Function, ні впровадження скриптів, ні відкриття документа. Він ніколи нікуди не надсилається: ні вивантаження, ні запиту, ні аналітики. Окрім рекламного слота внизу сторінки та рядка кнопок «поділитися» (це єдині два сторонні віджети, які завантажує ця сторінка), жоден шрифт чи скрипт не завантажується з іншого хоста. Декодований вивід виводиться на сторінку як текст, тож HTML-тег, що вийшов з шару, відображається як тег, а не перетворюється на нього. Ви можете перевірити все це: натисніть Самотест, і він перевірить вихідний код цієї сторінки на будь-які такі конструкції і завершиться невдачею, якщо знайде одну.
Що вона може розпізнати, а що ні
Техніка Наскільки впевнено, саме по собі Підступ

Текст, процитований на цій сторінці, написано для цього сайту. Алфавіти Base64, Base32, Base58, Base91 і quoted-printable та формат блоків uuencode є опублікованими; декодування дотримується цих визначень, а не особливостей якогось інструмента. Еталонні вектори алфавітів є на сусідніх сторінках, які містять тестові вектори RFC 4648.

Текст, перенесений на кілька рядків

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

Ця сторінка не ігнорує їх сама по собі, і причина — правило, яке вона скрізь інакше застосовує. Пробіл — найсильніша окрема ознака того, що рядок є прозою, а не даними, і саме цей тест не дає The quick brown fox jumps over the lazy dog. бути прочитаним як щось взагалі. Перенесений блоб виглядає для цього тесту точно як проза, тож сторінка в ньому нічого не знаходить — а потім робить чесну половину роботи: з'ясовує, що вона знайшла б, якщо б пробіли вилучити, перелічує це у вибірнику вручну з позначкою спершу прибрати пробіли і зупиняється. Його перелічують, а не застосовують, бо вилучення пробілів змінює ваш текст, а ця сторінка змінює текст лише тоді, коли може довести, що саме змінюється. Тут вона може довести зміну і все одно відмовляється її робити за вас, бо текст із розривом рядка всередині значення і текст із розривом між двома полями зсередини виглядають однаково.

Два кроки, коли сторінка зупинилася на перенесеному тексті. Перейдіть у Крок за кроком вручну, натисніть Застосувати наступний шар один раз (це дає сторінці ланцюжок, до якого можна щось додати, і нічого не змінює), потім оберіть запис із позначкою спершу прибрати пробіли і натисніть Застосувати. Рядок, що з'являється, каже, скільки пробільних символів вилучено, і вказує розмір введення як текст, який ви вставили, тож різниця між двома числами в цьому рядку — саме ті пробіли, що вийшли.

Те саме міркування стосується випадків у зворотному напрямку. Блок uuencode несе рядок begin і символ довжини в кожному рядку, тож його можна розпізнати як є і застосовувати самостійно; тіло quoted-printable зберігає власні м'які розриви рядків і декодується власним декодером, який знає, що окремий кінцевий = наприкінці рядка є продовженням, а не даними. Там, де тест форми не може відрізнити прозу від даних, сторінка відмовляється і показує вам альтернативу, а не вибирає за вас.

Що ця сторінка запустить, а що відмовиться

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

Оцінки свідомо песимістичні. Вони походять з тестового обв'язку за таймінгом, а не з вашої машини, і настільний браузер зазвичай швидший від показаної цифри в кілька разів.