Decodificador de Protocol Buffers

Etapa 1 / 333%

Inspecione uma mensagem Protocol Buffers codificada sem enviá-la nem fingir que conhece o respectivo esquema. Este decodificador no navegador aceita explicitamente dados hexadecimais, Base64, Base64URL, texto UTF-8 simples ou um arquivo binário. Percorre todos os wire types válidos, mantém exatos os inteiros de 64 bits, indica o offset de dados malformados e mostra todas as interpretações completas de valores delimitados por comprimento. O payload permanece no navegador e nenhum serviço mencionado nos dados é contatado.

Como funciona

  1. 1

    Escolha a codificação exata

    Selecione hexadecimal, Base64, Base64URL, texto UTF-8 simples ou arquivo binário. A ferramenta nunca tenta adivinhar o formato.

  2. 2

    Inspecione os campos wire

    Decodifique tags, números de campo e valores wire e expanda cada candidato aninhado ou packed válido sem atribuir um tipo de esquema.

  3. 3

    Exporte o relatório

    Baixe um JSON sem esquema, CSV protegido contra fórmulas ou relatório de texto legível.

O que um decodificador Protobuf sem esquema pode comprovar

Protocol Buffers armazena uma sequência de tags e valores de campo, não as declarações .proto originais. O guia oficial de codificação protobuf define cada tag como (field_number << 3) | wire_type. Assim, o decodificador comprova o número de campo, wire type, limites dos bytes e codificações estruturalmente possíveis. Não pode determinar se um varint foi declarado como uint64, int64, sint64, bool ou enum, pois podem compartilhar os mesmos bytes.

O modo de entrada é sempre explícito. Hexadecimal permite espaços ASCII e, no máximo, um 0x inicial. Base64 e Base64URL são validados separadamente, incluindo comprimento, padding e bits de preenchimento não usados; os alfabetos normal e URL-safe não podem ser misturados. Texto simples são os bytes UTF-8 exatos produzidos pelo TextEncoder do navegador, escapes com barra invertida não são interpretados. Um arquivo é lido byte a byte.

Wire types e interpretações

Wire type Valor codificado O que o relatório mostra
0 Varint Valores exatos sem sinal, com sinal em complemento de dois e ZigZag; booleano apenas para 0 ou 1
1 Oito bytes little-endian Inteiros fixed64 e sfixed64 exatos e um candidato double
2 Comprimento seguido de bytes Hexadecimal e Base64, UTF-8 estrito quando válido e todos os candidatos aninhados ou packed completos
3 / 4 Tags de início e fim do grupo Filhos do grupo com o mesmo número; a tag final delimita e não é outro registro
5 Quatro bytes little-endian Inteiros fixed32 e sfixed32 exatos e um candidato float

O tipo Number comum do JavaScript não representa todos os inteiros de 64 bits com exatidão. O parser usa BigInt e converte os inteiros exatos em strings decimais para exibição e exportação. NaN, infinitos e zero negativo também são exportados como strings para que o JSON não os altere silenciosamente.

Compreender a ambiguidade delimitada por comprimento

O wire type 2 serve para strings, bytes simples, mensagens incorporadas e escalares repetidos packed. Sem esquema, uma sequência pode ter vários papéis. 2a 03 01 02 03, por exemplo, é o campo 5 com três bytes: são varints packed válidos [1, 2, 3], mas também bytes normais. O decodificador mostra ambas as possibilidades sem escolher uma.

Um candidato a mensagem aninhada só aparece se todo o corpo formar uma mensagem completa. Candidatos varint, fixed32 e fixed64 packed também precisam consumir todos os bytes. UTF-8 estrito exige a sequência completa sem caracteres de substituição. Estas verificações mostram possibilidades estruturais, não o tipo declarado.

Os grupos seguem a gramática wire, apesar de os esquemas modernos preferirem mensagens incorporadas. Uma tag inicial precisa fechar com a tag final do mesmo campo. Um fim na raiz, número diferente ou fechamento ausente causa erro fatal no offset exato. Os campos completos anteriores continuam visíveis; bytes ausentes e valores desconhecidos nunca se tornam um zero fictício.

Limites, framing e tratamento seguro

O decodificador aceita uma mensagem sem framing até 10 MiB. Não separa streams com prefixo de comprimento, frames gRPC, arquivos de mensagens delimitadas nem envelopes de transporte. Remova primeiro o framing e decodifique uma mensagem. O parser limita registros, profundidade recursiva, linhas visíveis e trabalho dos candidatos, seguindo as recomendações sobre grandes conjuntos de dados e limites de implementação.

Os números de campo devem estar entre 1 e 536 870 911. O intervalo 19 000–19 999 gera um aviso porque as orientações oficiais o reservam para implementações. Os wire types 6 e 7 são inválidos.

A análise e a exportação ocorrem localmente. A visualização por etapas pode salvar um payload limitado no sessionStorage desta aba por até duas horas; recomeçar apaga-o. Nada entra na URL nem é enviado aos nossos servidores. O JSON é um relatório de decodificação no formato próprio desta ferramenta, não ProtoJSON. O CSV começa com BOM UTF-8 e neutraliza células semelhantes a fórmulas para maior segurança numa planilha. O relatório pode conter dados confidenciais: verifique-o antes de compartilhar.

Perguntas frequentes

Não. O wire format preserva números e codificações de campo, mas tipos escalares diferentes podem usar os mesmos bytes. Nomes, comentários e grande parte da intenção do esquema não estão presentes.

Não. Validação, análise, filtros e exportações funcionam no navegador. O payload não é enviado aos nossos servidores nem colocado na URL.

Um valor delimitado por comprimento pode ser bytes, texto UTF-8, uma mensagem incorporada ou valores packed. Sem esquema, mostrar todos os candidatos completos é mais rigoroso do que adivinhar.

Nesse ponto, uma tag, varint, valor de largura fixa, comprimento declarado ou limite de grupo estava incompleto ou inválido. Os campos completos anteriores ficam no relatório parcial.

Não diretamente. O decodificador lê uma mensagem protobuf e não remove framing gRPC, comprimentos varint ou outros envelopes. Extraia primeiro o payload de uma mensagem.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas