Koder i dekoder Z85

Zamień tekst, bajty szesnastkowe lub pliki na Z85 i z powrotem. Z85 to wariant Base85 zdefiniowany przez ZeroMQ, z alfabetem, który mieści się w literałach łańcuchowych w kodzie źródłowym bez znaków ucieczki.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst lub bajty na Z85, lub „Dekoduj”, aby zamienić Z85 z powrotem na dane.
  2. W przypadku kluczy i innych wartości binarnych ustaw „Wejście jako” na „Hex” przy kodowaniu lub „Wyjście jako” na „Hex” przy dekodowaniu.
  3. Wpisz lub wklej dane albo otwórz plik. Wynik aktualizuje się na bieżąco podczas pisania.
  4. Skopiuj wynik lub pobierz go jako plik.

Czym jest Z85?

Z85 opisuje ZeroMQ RFC 32 (specyfikacja społeczności ZeroMQ, a nie dokument RFC organizacji IETF). Podobnie jak inne kodowania Base85 zamienia każde 4 bajty na 5 znaków: odczytuje każdą grupę jako 32-bitową liczbę w kolejności big-endian i zapisuje ją jako 5 cyfr w systemie o podstawie 85, zaczynając od najbardziej znaczącej. Wynik jest o 25% większy od danych wejściowych.

Z85 wyróżnia się alfabetem: 0-9, a-z, A-Z i 23 symbole .-:+=^!/*?&<>()[]{}@%$#. Pomija cudzysłów i apostrof, ukośnik wsteczny, grawis, przecinek, średnik, kreskę pionową, tyldę i podkreślenie. Alfabet zaprojektowano tak, aby był bezpieczny w łańcuchach w kodzie źródłowym, więc wartość Z85 można wkleić między cudzysłowy w C, Pythonie lub JSON bez żadnych znaków ucieczki.

Gdzie używa się Z85

ZeroMQ używa Z85 do zapisu kluczy CurveZMQ. 32-bajtowy klucz publiczny lub tajny staje się 40-znakowym ciągiem Z85. W tej postaci zwraca go zmq_curve_keypair() i w tej postaci przyjmują go opcje gniazd dla zabezpieczeń CURVE. Biblioteka udostępnia też funkcje zmq_z85_encode() i zmq_z85_decode(), a powiązania, takie jak pyzmq, oferują te same funkcje.

// C (libzmq)
char text[41];                       // 32 bajty -> 40 znaków + NUL
zmq_z85_encode(text, key, 32);

# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b'))   # b'HelloWorld'

Ostatni wiersz to wektor testowy ze specyfikacji.

Długość danych wejściowych: uwaga dotycząca tego narzędzia

RFC 32 wymaga, aby długość danych binarnych była wielokrotnością 4 bajtów, a długość zakodowanego ciągu wielokrotnością 5 znaków. Nie definiuje dopełnienia, a ścisłe implementacje, takie jak zmq_z85_encode(), odrzucają inne długości.

To narzędzie akceptuje również inne długości, stosując tę samą regułę co Ascii85 i Base85: końcowa grupa n bajtów daje n + 1 znaków. To niestandardowe rozszerzenie. Wynik uzyskany w ten sposób może zostać odrzucony przez inne dekodery Z85, więc gdy potrzebna jest zgodność, dopełnij dane do wielokrotności 4 bajtów. Klucze CurveZMQ mają 32 bajty i zawsze spełniają ten warunek.

Specyfikacja

Alfabet0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$#
Rozmiar wyniku5 znaków na 4 bajty (125%)
DopełnienieBrak
StandardZeroMQ RFC 32
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!nm=QNz.92jz/PV8aP
Base64.islsB}Dhz^42A@
你好<H}kFRm=

Najczęściej zadawane pytania

Czym różni się Z85 od Ascii85?
Arytmetyka jest ta sama, alfabety już nie. Ascii85 używa zakresu ASCII od ! do u, który obejmuje cudzysłowy i ukośnik wsteczny, i ma skrót z dla bajtów zerowych. Z85 unika znaków wymagających ucieczki w łańcuchach i nie ma żadnego skrótu.
Czy Z85 używa dopełnienia?

Nie. Specyfikacja dopuszcza tylko dane wejściowe o długości będącej wielokrotnością 4 bajtów. To narzędzie koduje inne długości z krótszą grupą końcową, co nie jest częścią standardu.

Czy Z85 można używać w JSON, XML lub adresach URL?
W łańcuchach JSON tak, bez żadnych znaków ucieczki. W XML i HTML znaki <, > i & trzeba zastąpić encjami. Do adresów URL Z85 się nie nadaje, ponieważ ?, &, / i # mają w nich specjalne znaczenie. Zamiast niego użyj Base64URL lub Base58.
Jak długi jest klucz CurveZMQ zakodowany w Z85?

Klucz CurveZMQ ma 32 bajty, więc po zakodowaniu ma dokładnie 40 znaków. Aby zobaczyć surowy klucz, zdekoduj go tutaj z opcją „Wyjście jako” ustawioną na „Hex”.