Decodificador de Protobuf (sin .proto)
Una carga protobuf no revela nada por sí sola. En el cable no viajan nombres de campo, solo números y tipos de wire, así que un cuerpo opaco de una llamada gRPC o de una captura de API es ilegible salvo que tengas el .proto que lo generó — y cuando depuras el servicio de otra persona, normalmente no lo tienes. Este decodificador lee el formato de wire directamente. Cada campo vuelve con su número, su tipo de wire y su valor, los mensajes anidados se expanden en su sitio y, donde la codificación es ambigua, lo dice en lugar de elegir por ti. Esa ambigüedad es real: un varint puede ser un entero sin signo, uno con signo en zigzag o un booleano, y un campo con longitud puede ser una cadena, un mensaje anidado, números repetidos packed o bytes en bruto. La herramienta muestra la lectura más probable y enumera las demás al lado. La detección de mensajes anidados no es una conjetura sobre el significado: una secuencia de bytes solo se ofrece como mensaje si se analiza limpiamente como tal, con cada clave un número de campo válido y cada longitud terminando exactamente al final. Todo ocurre en tu navegador; la carga no se sube.
Pega una carga protobuf en base64 o hex para decodificarla.
Cómo usar
- Pega la carga en base64 o hex: el formato se detecta y puedes forzarlo.
- Lee el árbol: cada línea es el número de campo, el tipo de wire y el valor.
- Fíjate en el texto gris con las otras lecturas posibles de un valor.
- Los mensajes anidados aparecen indentados bajo su campo padre.
- Suelta un archivo binario para decodificar un cuerpo capturado directamente.
Preguntas frecuentes
- ¿Por qué no hay nombres de campo?
- Porque no se transmiten. Protobuf pone en el cable solo un número de campo y un tipo de wire; los nombres viven en el archivo .proto de ambos extremos. Eso es lo que hace compacta la codificación, y es la razón por la que un decodificador sin esquema puede mostrarte la forma de un mensaje pero no cómo se llaman sus campos.
- ¿Cómo sabe que un campo contiene un mensaje anidado?
- Intenta analizar los bytes como tal y acepta el resultado solo si es totalmente consistente: cada clave un número de campo y un tipo de wire válidos, y cada longitud acabando justo donde acaba el búfer. Las cadenas cortas a veces pasan esa prueba por casualidad, así que cuando los bytes también son texto válido la herramienta indica que la lectura es ambigua.
- ¿Cuáles son las lecturas alternativas de un número?
- Un varint puede ser un int32/int64/uint, un sint en zigzag o un bool. Un fixed64 puede ser un double, un fixed64 o un sfixed64. Nada en la carga los distingue, así que se muestra primero la lectura más común y las otras al lado.
- ¿Puede decodificar cuerpos gRPC?
- Una trama gRPC añade un byte de compresión y cuatro de longitud antes de cada mensaje. Quita esos cinco bytes y el resto se decodifica aquí. Las tramas comprimidas hay que descomprimirlas primero.
- ¿Y los grupos?
- Los grupos son los tipos de wire 3 y 4, obsoletos desde proto2, y casi nunca se ven. El decodificador señala la marca donde la encuentra en vez de adivinar el anidamiento.
- ¿Se sube mi carga?
- No. Los bytes se decodifican en tu navegador y no se envía nada a ningún servidor.
Herramientas relacionadas
Conversor de JSON a esquema Protobuf (proto3)
Convierte un objeto JSON en un esquema .proto de proto3 con campos tipados y mensajes anidados, en tu navegador.
Decodificador JWT
Decodifica un JSON Web Token para ver su cabecera, claims y expiración.
Decodificador de MessagePack
Pega bytes MessagePack en base64 o hex y lee los valores —tipos, mapas anidados, binarios y marcas de tiempo— en tu navegador.
Codificador / Decodificador Base64
Codifica texto a Base64 o decodifica Base64 a texto al instante.
Analizador y decodificador de Data URI
Decodifica un data: URI para ver su tipo MIME, codificación, tamaño y contenido decodificado, en tu navegador.
Conversor de Base64 a hexadecimal (y vuelta)
Convierte una cadena Base64 a bytes hexadecimales y hex de vuelta a Base64, con soporte URL-safe, en tu navegador.