Jak używać
- Wybierz „Koduj”, aby zamienić tekst lub bajty na Z85, lub „Dekoduj”, aby zamienić Z85 z powrotem na dane.
- W przypadku kluczy i innych wartości binarnych ustaw „Wejście jako” na „Hex” przy kodowaniu lub „Wyjście jako” na „Hex” przy dekodowaniu.
- Wpisz lub wklej dane albo otwórz plik. Wynik aktualizuje się na bieżąco podczas pisania.
- 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
| Alfabet | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Rozmiar wyniku | 5 znaków na 4 bajty (125%) |
| Dopełnienie | Brak |
| Standard | ZeroMQ RFC 32 |
| Rozróżnia wielkość liter | Tak |
Przykłady
| Wejście (UTF-8) | Wyjście |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
Najczęściej zadawane pytania
Czym różni się Z85 od Ascii85?
! 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?
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”.