Protocol Buffers-decoder

Stap 1 / 333%

Inspecteer een gecodeerd Protocol Buffers-bericht zonder het te uploaden of te doen alsof het schema bekend is. Deze browserdecoder accepteert expliciet hexadecimale gegevens, Base64, Base64URL, onbewerkte UTF-8-tekst of een binair bestand. Hij doorloopt elk geldig wire-type, houdt 64-bits gehele getallen exact, meldt de byte-offset van ongeldige gegevens en toont alle volledige interpretaties van dubbelzinnige waarden met een lengteprefix. De payload blijft in de browser en diensten die in de gegevens worden genoemd, worden nooit benaderd.

Hoe het werkt

  1. 1

    Kies de exacte codering

    Selecteer hex, Base64, Base64URL, onbewerkte UTF-8-tekst of een binair bestand. De tool raadt het invoerformaat nooit automatisch.

  2. 2

    Inspecteer wire-velden

    Decodeer tags, veldnummers en wire-waarden en vouw elke geldige geneste of packed kandidaat open zonder een schematype toe te wijzen.

  3. 3

    Exporteer het rapport

    Download een schemaloos JSON-rapport, formuleveilige CSV of goed leesbaar tekstrapport.

Wat een Protobuf-decoder zonder schema kan bewijzen

Protocol Buffers bewaart een reeks veldtags en waarden, niet de oorspronkelijke .proto-declaraties. De officiële protobuf-coderingsgids definieert elke tag als (field_number << 3) | wire_type. Daardoor kan deze decoder het veldnummer, wire-type, bytebereik en de structureel mogelijke coderingen vaststellen. Hij kan niet bewijzen of een varint als uint64, int64, sint64, bool of enum is gedeclareerd, want die declaraties kunnen dezelfde bytes gebruiken.

De invoermodus wordt altijd expliciet gekozen. Hex staat ASCII-witruimte en hoogstens één voorloopwaarde 0x toe. Base64 en Base64URL worden afzonderlijk gecontroleerd, inclusief lengte, padding en ongebruikte paddingbits; standaard- en URL-veilige alfabetten mogen niet worden gemengd. Onbewerkte tekst betekent precies de UTF-8-bytes van de TextEncoder in de browser, backslash-escapes worden niet geïnterpreteerd. Bestandsinvoer gebruikt de exacte bytes.

Wire-typen en interpretaties

Wire-type Gecodeerde waarde Wat het rapport toont
0 Varint Exacte unsigned waarde, signed tweescomplement en ZigZag; boolean alleen voor 0 of 1
1 Acht little-endian bytes Exacte fixed64- en sfixed64-getallen plus een double-kandidaat
2 Lengte gevolgd door bytes Hex en Base64, strikt UTF-8 indien geldig en elke volledige geneste of packed kandidaat
3 / 4 Start- en eindtags van groep Kindvelden van de groep met hetzelfde veldnummer; de eindtag begrenst en is geen apart record
5 Vier little-endian bytes Exacte fixed32- en sfixed32-getallen plus een float-kandidaat

Het gewone Number-type van JavaScript kan niet elk 64-bits geheel getal exact weergeven. De parser gebruikt daarom overal BigInt en zet exacte gehele getallen voor weergave en export om in decimale tekenreeksen. Bijzondere zwevendekommawaarden zoals NaN, oneindigheden en negatieve nul worden eveneens als tekst geëxporteerd, zodat JSON ze niet stilzwijgend verandert.

Dubbelzinnigheid bij waarden met een lengteprefix

Wire-type 2 wordt gebruikt voor tekenreeksen, ruwe bytes, ingesloten berichten en packed herhaalde scalaire waarden. Zonder schema kan één bytereeks meerdere rollen hebben. 2a 03 01 02 03 is bijvoorbeeld veld 5 met drie bytes. Die bytes zijn geldige packed varints [1, 2, 3], maar ook gewone bytes. De decoder toont beide mogelijkheden zonder er één waarschijnlijker te noemen.

Een geneste-berichtkandidaat verschijnt alleen wanneer de volledige inhoud als compleet bericht kan worden gelezen. Kandidaten voor packed varint, fixed32 en fixed64 verschijnen eveneens alleen als de interpretatie alle bytes verbruikt. Een strikte UTF-8-kandidaat moet volledig zonder vervangingstekens decoderen. Dit zijn structurele mogelijkheden, niet het gedeclareerde veldtype.

Groepen worden volgens de wire-grammatica verwerkt, al gebruiken moderne schema’s meestal ingesloten berichten. Een starttag moet sluiten met een eindtag met hetzelfde veldnummer. Een eindtag op rootniveau, afwijkend nummer of ontbrekende afsluiting geeft een fatale fout op de exacte byte-offset. Eerder volledig gedecodeerde velden blijven zichtbaar; ontbrekende bytes en onbekende waarden worden nooit een verzonnen nul.

Limieten, framing en veilig gebruik

De decoder accepteert één ongeframed bericht tot 10 MiB. Hij splitst geen streams met lengteprefix, gRPC-frames, bestanden met afgebakende berichten of transport-enveloppen. Verwijder eerst de framing en decodeer daarna één bericht. De parser begrenst het aantal records, recursiediepte, zichtbare rijen en kandidaatwerk, in de geest van de officiële informatie over grote gegevensverzamelingen en implementatielimieten.

Veldnummers moeten tussen 1 en 536.870.911 liggen. Voor 19.000–19.999 verschijnt een waarschuwing, omdat de officiële richtlijn voor veldnummers dit implementatiebereik reserveert. Wire-typen 6 en 7 zijn ongeldig.

Parsing en export vinden lokaal plaats. De meerstapsweergave kan een begrensde payload maximaal twee uur in de sessionStorage van dit tabblad bewaren; opnieuw beginnen verwijdert deze. Niets komt in de URL of wordt naar onze servers verzonden. JSON is nadrukkelijk een decoderapport in de eigen indeling van deze tool, geen ProtoJSON. CSV begint met een UTF-8-BOM en neutraliseert formuleachtige cellen om veiliger in spreadsheets te openen. Rapporten kunnen nog steeds vertrouwelijke applicatiegegevens bevatten: controleer ze voordat u ze deelt.

Veelgestelde vragen

Nee. Het wire-format bewaart veldnummers en wire-coderingen, maar verschillende gedeclareerde scalaire typen kunnen dezelfde bytes gebruiken. Namen, opmerkingen en de meeste schema-intentie ontbreken.

Nee. Invoervalidatie, parsing, filtering en export draaien in de browser. De payload wordt niet via onze servers verstuurd en niet in de URL geplaatst.

Een waarde met lengteprefix kan bytes, UTF-8-tekst, een ingesloten bericht of packed waarden voorstellen. Zonder schema is elke volledige kandidaat tonen betrouwbaarder dan gokken.

Daar was een tag, varint, waarde met vaste breedte, opgegeven lengte of groepsgrens onvolledig of ongeldig. Eerdere complete velden blijven in het deelrapport staan.

Niet rechtstreeks. Deze decoder leest één protobuf-bericht en verwijdert geen gRPC-, varint-lengte- of andere transportframing. Haal eerst de payload van één bericht uit de stream.

Gerelateerde tools

Tool beschikbaar in andere talen