Bộ giải mã / mã hóa Protobuf
Protobuf được mã hóa Base64
Các trường đã giải mã (2)
| Trường # | Loại Wire | Giá trị |
|---|---|---|
| 1 | Varint(0) | 150 |
| 2 | Length-delimited(2) | testing |
Chi tiết kỹ thuật
Cách hoạt động của bộ giải mã Protobuf
Công cụ làm gì
Bộ giải mã Protobuf phân tích dữ liệu nhị phân Protocol Buffer thô mà không cần tệp schema .proto, hiển thị số trường, kiểu và giá trị theo wire-format. Công cụ cũng hỗ trợ mã hóa JSON trở lại thành protobuf nhị phân khi bạn cung cấp một định nghĩa .proto. Điều này giúp có thể kiểm tra các payload protobuf “mờ” được bắt từ lưu lượng mạng hoặc lưu trong cơ sở dữ liệu mà không cần truy cập schema gốc.
Các trường hợp sử dụng phổ biến cho lập trình viên
Lập trình viên backend dùng giải mã protobuf không cần schema để reverse-engineer các API gRPC không có tài liệu, gỡ lỗi các thông điệp đã serialize trong các topic Kafka hoặc kiểm tra payload nhị phân trong các cột cơ sở dữ liệu. Nhà nghiên cứu bảo mật phân tích lưu lượng mạng được mã hóa protobuf trong quá trình kiểm thử xâm nhập. Chế độ mã hóa giúp lập trình viên xác minh rằng các định nghĩa .proto của họ tạo ra đầu ra nhị phân đúng như mong đợi trước khi triển khai thay đổi schema lên các dịch vụ production.
Định dạng dữ liệu, kiểu hoặc biến thể
Protocol Buffers dùng wire format gọn nhẹ với năm wire type: varint (int32, int64, bool, enum), fixed 64-bit (double, fixed64), length-delimited (string, bytes, embedded messages, packed repeated fields), fixed 32-bit (float, fixed32) và các kiểu start/end group đã bị loại bỏ. Khi không có schema, bộ giải mã không thể phân biệt giữa string và embedded message (cả hai đều là length-delimited), vì vậy nó thử cả hai cách diễn giải và hiển thị cách phân tích có khả năng đúng nhất.
Các lỗi thường gặp và trường hợp biên
Giải mã không có schema vốn dĩ mơ hồ — một varint có thể là int32 có dấu (zigzag), uint32 không dấu, hoặc boolean, và các trường length-delimited có thể là chuỗi, bytes, hoặc message lồng nhau. Tên trường bị mất trong mã hóa nhị phân và chỉ xuất hiện dưới dạng thẻ trường dạng số. Các trường lặp dạng packed trông giống hệt một trường bytes đơn lẻ nếu không có ngữ cảnh schema. Luôn đối chiếu đầu ra đã giải mã với bất kỳ tài liệu nào sẵn có để giải quyết các điểm mơ hồ.
Khi nào nên dùng công cụ này thay vì viết mã
Hãy dùng công cụ trên trình duyệt này để kiểm tra nhanh các payload protobuf đã thu thập khi bạn không có tệp .proto hoặc muốn xác minh mã hóa mà không cần thiết lập toolchain build. Với các hệ thống production, hãy dùng protoc với các tệp schema phù hợp, mã được sinh theo từng ngôn ngữ, và các dịch vụ gRPC reflection cung cấp đầy đủ an toàn kiểu, khả năng tương thích về sau, và tích hợp với hệ thống build của ứng dụng của bạn.