Декодер Protocol Buffers
Исследуйте закодированное сообщение Protocol Buffers, не загружая его на сервер и не выдавая предположения о схеме за факты. Этот браузерный декодер принимает явно выбранный ввод в шестнадцатеричном виде, Base64, Base64URL, исходном UTF-8 или из двоичного файла. Он проходит по всем допустимым wire-типам protobuf, сохраняет точность 64-битных целых чисел, указывает смещения повреждённых данных и показывает все полные трактовки неоднозначных полей с длиной. Полезная нагрузка остаётся в браузере, а декодер никогда не обращается к сервисам, названия которых встретились в данных.
Как это работает
-
1
Точно выберите кодировку
Выберите hex, Base64, Base64URL, исходный UTF-8 или двоичный файл. Инструмент никогда не угадывает формат ввода автоматически.
-
2
Исследуйте wire-поля
Декодируйте теги, номера полей и wire-значения, затем раскройте все допустимые вложенные и упакованные варианты, не приписывая полю тип из схемы.
-
3
Экспортируйте отчёт
Скачайте JSON без схемы, защищённый от формул CSV или удобочитаемый текстовый отчёт для дальнейшего анализа.
Что может доказать декодер Protobuf без схемы
Protocol Buffers хранит последовательность тегов и значений полей, а не исходные объявления .proto. Официальное руководство по кодированию protobuf определяет тег как номер поля, сдвинутый на три бита и объединённый с wire-типом, что эквивалентно field_number × 8 + wire_type. Поэтому декодер может достоверно определить номер поля, wire-тип, границы байтов и структурно допустимые кодировки. Но он не может доказать, что varint был объявлен как uint64, int64, sint64, bool или enum: эти объявления могут иметь одинаковое представление в байтах.
Режим ввода всегда выбирается явно. Hex допускает пробельные символы ASCII и не более одного префикса 0x в начале. Base64 и Base64URL проверяются отдельно, включая длину, заполнение и неиспользованные биты заполнения; смешивать стандартный и URL-безопасный алфавиты нельзя. Исходный текст означает точные байты UTF-8, созданные браузерным TextEncoder: последовательности с обратной косой чертой не интерпретируются. При загрузке файла используются его точные байты.
Wire-типы и варианты трактовки
| Wire-тип | Закодированное значение | Что показывает отчёт |
|---|---|---|
| 0 | Varint | Точные беззнаковое, знаковое в дополнительном коде и ZigZag-значение; Boolean, только для 0 или 1 |
| 1 | Восемь байтов little-endian | Точные целые fixed64 и sfixed64, а также вариант double |
| 2 | Длина и следующие за ней байты | Hex и Base64, строгий UTF-8 при допустимости и все полные вложенные или упакованные варианты |
| 3 / 4 | Теги начала и конца группы | Дочерние поля группы с совпадающим номером; конечный тег, разделитель, а не отдельная запись |
| 5 | Четыре байта little-endian | Точные целые fixed32 и sfixed32, а также вариант float |
Обычный тип number в JavaScript не может точно представить все 64-битные целые числа. Декодер использует BigInt во всём wire-парсере и преобразует точные целые числа в десятичные строки для отображения и экспорта. Особые значения с плавающей точкой, включая NaN, бесконечности и отрицательный ноль, также экспортируются строками, чтобы JSON незаметно не заменил их другим значением.
Неоднозначность полей с длиной
Wire-тип 2 используется для строк, необработанных байтов, вложенных сообщений и упакованных повторяющихся скалярных значений. Без схемы одна последовательность байтов может одновременно допускать несколько трактовок. Например, 2a 03 01 02 03, это поле 5 с тремя байтами. Эти байты допустимы как упакованные varint [1, 2, 3], но одновременно остаются обычными байтами. Декодер показывает оба варианта и не считает один из них более вероятным.
Вариант вложенного сообщения появляется, только если всё содержимое поля с длиной полностью разбирается как корректное сообщение. Варианты упакованных varint, fixed32 и fixed64 также появляются лишь при полном потреблении всех байтов. Для строгого варианта UTF-8 вся последовательность должна декодироваться без символов замены. Эти проверки показывают структурные возможности, а не объявленный тип поля.
Группы обрабатываются по правилам wire-грамматики, хотя современные схемы обычно предпочитают вложенные сообщения. Тег начала группы должен закрываться тегом конца группы с тем же номером поля. Конечный тег в корне, несовпадающий тег или отсутствие закрытия останавливают декодирование на точном смещении. Полностью разобранные до ошибки поля остаются видимыми; недостающие байты и неизвестные значения никогда не превращаются в ложный ноль.
Ограничения, фрейминг и безопасная обработка
Декодер принимает одно сообщение без фрейминга размером до 10 MiB. Он не разделяет поток с префиксом длины, gRPC-фрейм, файл delimited-message или транспортную оболочку. Сначала удалите фрейминг, затем декодируйте одно сообщение. Парсер также ограничивает общее число записей, глубину рекурсии, количество видимых строк и объём анализа вариантов. Эти меры следуют принципам официальных рекомендаций о больших наборах данных и ограничениях реализаций: protobuf эффективен, но диагностической вкладке браузера всё равно нужны ограничения памяти и вычислений.
Номер поля должен находиться в диапазоне от 1 до 536 870 911. Декодер предупреждает о номерах 19 000–19 999, потому что официальное руководство по номерам полей резервирует этот диапазон для реализации. Wire-типы 6 и 7 недопустимы.
Разбор и экспорт выполняются локально. Многошаговый режим может хранить ограниченную полезную нагрузку в sessionStorage этой вкладки до двух часов; при запуске заново она удаляется. В URL ничего не помещается и на наши серверы не отправляется. JSON-вывод представляет собой отчёт о декодировании в собственном формате этого инструмента, а не ProtoJSON. CSV начинается с UTF-8 BOM, а похожие на формулы ячейки получают префикс для более безопасного открытия в таблицах. Отчёты всё же могут содержать конфиденциальные данные приложения, поэтому проверяйте их перед передачей.
Часто задаваемые вопросы
Нет. Wire-формат сохраняет номера полей и способы кодирования, но разные объявленные скалярные типы могут иметь одинаковые байты. Имена, комментарии и большая часть замысла схемы отсутствуют.
Нет. Проверка ввода, разбор, фильтрация и экспорт выполняются в вашем браузере. Полезная нагрузка не отправляется через наши серверы и не помещается в URL.
Поле с длиной может законно представлять байты, текст UTF-8, вложенное сообщение или упакованные значения. Без схемы честнее показать все полные варианты, чем угадывать.
В этом месте тег, varint, значение фиксированной ширины, заявленная длина или граница группы оказались неполными либо недопустимыми. Предыдущие полные поля сохраняются в частичном отчёте.
Не напрямую. Декодер читает одно сообщение protobuf и не удаляет gRPC-, varint-length- и другой транспортный фрейминг. Сначала извлеките полезную нагрузку одного сообщения.
Сопутствующие инструменты
Смешивание цветов
Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.
Счетчик FPS
Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.
Генератор случайных букв
Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.
Генератор бейджей README
Создавайте бейджи shields.io для файлов README на GitHub: статус сборки, версия, лицензия, число загрузок и покрытие кода. Просмотрите и скопируйте фрагмент Markdown.
Конвертер из формата HEX в ASCII
Преобразует последовательности шестнадцатеричных байтов в текст в формате ASCII. Отлично подходит для отладки протоколов, обратного инженеринга и решений задач типа CTF.
Справочник сочетаний клавиш
Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.
Инструмент доступен на других языках
- Protocol Buffers 디코더 [KO]
- Protocol Buffers-avkodare [SV]
- Protocol Buffers-decoder [NL]
- Dekoder Protocol Buffers [PL]
- Protocol-Buffers-Decoder [DE]
- ตัวถอดรหัส Protocol Buffers [TH]
- Decodificador de Protocol Buffers [ES]
- Dekoder Protocol Buffers [ID]
- أداة فك ترميز Protocol Buffers [AR]
- Décodeur Protocol Buffers [FR]
- Protocol Buffers デコーダー [JA]
- Decodificador de Protocol Buffers [PT]
- Công cụ giải mã Protocol Buffers [VI]
- Protocol Buffers Decoder [EN]
- Decodificatore Protocol Buffers [IT]
- Protocol Buffers Kod Çözücü [TR]
- Protocol Buffers 解码器 [ZH]