Dekoder Protocol Buffers

Krok 1 / 333%

Sprawdź zakodowaną wiadomość Protocol Buffers bez przesyłania jej na serwer i bez udawania, że jej schemat jest znany. Ten działający w przeglądarce dekoder przyjmuje jawnie wybrane dane szesnastkowe, Base64, Base64URL, surowy tekst UTF-8 lub plik binarny. Odczytuje wszystkie prawidłowe typy wire, zachowuje dokładność liczb całkowitych 64-bitowych, wskazuje offset uszkodzonych danych i pokazuje wszystkie kompletne interpretacje niejednoznacznych wartości poprzedzonych długością. Payload pozostaje w przeglądarce, a usługi wymienione w danych nie są wywoływane.

Jak to działa

  1. 1

    Wybierz dokładne kodowanie

    Wybierz zapis szesnastkowy, Base64, Base64URL, surowy tekst UTF-8 albo plik binarny. Narzędzie nigdy nie zgaduje formatu wejściowego.

  2. 2

    Sprawdź pola wire

    Zdekoduj tagi, numery pól i wartości wire, a następnie rozwiń każdy prawidłowy kandydat zagnieżdżony lub packed bez przypisywania typu schematu.

  3. 3

    Wyeksportuj raport

    Pobierz bezschematowy raport JSON, plik CSV zabezpieczony przed formułami lub czytelny raport tekstowy.

Co może potwierdzić dekoder Protobuf bez schematu

Protocol Buffers przechowuje sekwencję tagów pól i wartości, a nie pierwotne deklaracje .proto. Oficjalny przewodnik po kodowaniu protobuf definiuje tag jako (field_number << 3) | wire_type. Dekoder może więc potwierdzić numer pola, typ wire, granice bajtów i strukturalnie możliwe kodowania. Nie ustali, czy varint zadeklarowano jako uint64, int64, sint64, bool czy enum, ponieważ różne deklaracje mogą mieć identyczne bajty.

Tryb wejścia jest zawsze wybierany jawnie. Zapis szesnastkowy dopuszcza białe znaki ASCII i co najwyżej jeden początkowy prefiks 0x. Base64 i Base64URL są sprawdzane osobno, łącznie z długością, paddingiem i niewykorzystanymi bitami dopełnienia; nie wolno mieszać alfabetu standardowego z URL-safe. Surowy tekst oznacza dokładnie bajty UTF-8 utworzone przez przeglądarkowy TextEncoder, sekwencje ucieczki z ukośnikiem wstecznym nie są interpretowane. Plik jest odczytywany bajt w bajt.

Typy wire i interpretacje

Typ wire Zakodowana wartość Co pokazuje raport
0 Varint Dokładne wartości bez znaku, ze znakiem w kodzie uzupełnień do dwóch i ZigZag; wartość logiczna tylko dla 0 lub 1
1 Osiem bajtów little-endian Dokładne liczby fixed64 i sfixed64 oraz kandydat double
2 Długość, po niej bajty Hex i Base64, ścisłe UTF-8, jeśli jest prawidłowe, oraz wszystkie kompletne kandydaty zagnieżdżone lub packed
3 / 4 Tagi początku i końca grupy Pola potomne grupy o tym samym numerze; tag końcowy jest ogranicznikiem, a nie osobnym rekordem
5 Cztery bajty little-endian Dokładne liczby fixed32 i sfixed32 oraz kandydat float

Zwykły typ Number w JavaScript nie reprezentuje dokładnie każdej liczby 64-bitowej. Parser używa BigInt i konwertuje dokładne liczby całkowite na ciągi dziesiętne do wyświetlania i eksportu. Specjalne wartości zmiennoprzecinkowe, takie jak NaN, nieskończoności i ujemne zero, także są eksportowane jako tekst, aby JSON nie zmienił ich po cichu.

Niejednoznaczność wartości poprzedzonych długością

Typ wire 2 służy do zapisu ciągów, surowych bajtów, wiadomości osadzonych i spakowanych powtarzanych wartości skalarnych. Bez schematu jeden ciąg bajtów może pełnić kilka ról. Na przykład 2a 03 01 02 03 to pole 5 z trzema bajtami. Są one prawidłowymi spakowanymi varintami [1, 2, 3], ale też zwykłymi bajtami. Dekoder pokazuje obie możliwości bez wskazywania bardziej prawdopodobnej.

Kandydat na wiadomość zagnieżdżoną pojawia się tylko wtedy, gdy cała zawartość tworzy kompletną wiadomość. Kandydaty packed varint, fixed32 i fixed64 również wymagają zużycia wszystkich bajtów. Ścisły kandydat UTF-8 musi dekodować całą sekwencję bez znaków zastępczych. To możliwości strukturalne, nie deklarowany typ pola.

Grupy są obsługiwane zgodnie z gramatyką wire, chociaż nowoczesne schematy zwykle wybierają wiadomości osadzone. Tag początku grupy musi mieć tag końcowy z tym samym numerem pola. Koniec na poziomie głównym, inny numer lub brak zamknięcia powoduje błąd krytyczny przy dokładnym offsecie. Wcześniejsze kompletne pola pozostają widoczne; brakujące bajty i nieznane wartości nigdy nie stają się fałszywym zerem.

Limity, framing i bezpieczna obsługa

Dekoder przyjmuje jedną wiadomość bez framingu o rozmiarze do 10 MiB. Nie rozdziela strumienia z prefiksem długości, ramek gRPC, plików z rozdzielonymi wiadomościami ani kopert transportowych. Najpierw usuń framing, a potem zdekoduj jedną wiadomość. Parser ogranicza liczbę rekordów, głębokość rekursji, widoczne wiersze i pracę nad kandydatami zgodnie z duchem oficjalnych wskazówek o dużych zbiorach danych i limitach implementacji.

Numery pól muszą mieścić się w zakresie od 1 do 536 870 911. Zakres 19 000–19 999 wywołuje ostrzeżenie, ponieważ oficjalne zalecenia dotyczące numerów pól rezerwują go dla implementacji. Typy wire 6 i 7 są nieprawidłowe.

Analiza i eksport odbywają się lokalnie. Widok wieloetapowy może przechowywać ograniczony payload w sessionStorage tej karty przez maksymalnie dwie godziny; rozpoczęcie od nowa go usuwa. Nic nie trafia do adresu URL ani przez nasze serwery. JSON jest raportem dekodowania we własnym formacie tego narzędzia, a nie ProtoJSON. CSV zaczyna się od BOM UTF-8 i neutralizuje komórki przypominające formuły, aby bezpieczniej otwierać je w arkuszu. Raport może nadal zawierać poufne dane aplikacji, sprawdź go przed udostępnieniem.

Najczęściej zadawane pytania

Nie. Format wire zachowuje numery pól i kodowania wire, ale różne zadeklarowane typy skalarne mogą używać tych samych bajtów. Nazwy, komentarze i większość intencji schematu nie są zapisane.

Nie. Walidacja, analiza, filtrowanie i eksport działają w przeglądarce. Payload nie jest wysyłany na nasze serwery ani umieszczany w adresie URL.

Wartość poprzedzona długością może oznaczać bajty, tekst UTF-8, osadzoną wiadomość lub wartości packed. Bez schematu pokazanie wszystkich kompletnych kandydatów jest rzetelniejsze niż zgadywanie.

W tym miejscu tag, varint, wartość o stałej szerokości, zadeklarowana długość lub granica grupy była niepełna albo nieprawidłowa. Wcześniejsze kompletne pola pozostają w raporcie częściowym.

Nie bezpośrednio. Dekoder odczytuje jedną wiadomość protobuf i nie usuwa framingu gRPC, długości varint ani innych kopert transportowych. Najpierw wyodrębnij payload jednej wiadomości.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach