Декодер цепочек кодирования

Текст, который прошёл через несколько кодировщиков, — обычный случай, а не экзотика: тело 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: эти две техники преобразуются длинным делением, стоимость которого растёт с квадратом длины, поэтому эта страница запускает их только на короткой строке и говорит об этом в шаге, а не делает вид, что зависла.

Оценки намеренно пессимистичны. Они получены от измерительного стенда, а не от вашей машины, и настольный браузер обычно в несколько раз быстрее показанной цифры.