Jak używać
- Wybierz „Koduj”, aby zamienić tekst lub bajty na Base85, lub „Dekoduj”, aby zamienić Base85 z powrotem na dane.
- Wpisz lub wklej dane wejściowe albo otwórz plik. Jeśli pracujesz na surowych bajtach, ustaw „Wejście jako” na „Hex”.
- Wynik aktualizuje się na bieżąco podczas pisania. Przy dekodowaniu ustaw „Wyjście jako” na „Tekst” lub „Hex” w zależności od zawartości danych.
- Skopiuj wynik lub pobierz go jako plik.
Czym jest Base85?
Base85 to rodzina kodowań, które zamieniają każde 4 bajty na 5 znaków. Pięć cyfr w systemie o podstawie 85 może przyjąć 85 × 85 × 85 × 85 × 85 = 4 437 053 125 wartości, czyli akurat tyle, by zmieścić dowolną liczbę 32-bitową. Dzięki temu wynik jest tylko o 25% większy od danych wejściowych, podczas gdy w Base64 jest to 33%.
Istnieje kilka alfabetów Base85 i nie są one wymienne: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) oraz alfabet używany na tej stronie. Składa się on z 0-9, A-Z, a-z i 23 symboli: !#$%&()*+-;<=>?@^_`{|}~. Pominięto cudzysłów i apostrof, przecinek, kropkę, ukośnik, dwukropek, ukośnik wsteczny i nawiasy kwadratowe.
RFC 1924, Git i Python
Zestaw znaków pochodzi z RFC 1924 „A Compact Representation of IPv6 Addresses”, opublikowanego 1 kwietnia 1996 roku jako primaaprilisowy żart. Zaproponowano w nim zapis 128-bitowego adresu IPv6 jako jednej liczby w systemie o podstawie 85, mającej dokładnie 20 znaków. Nikt nie zapisuje tak adresów IPv6, ale alfabet wykorzystano później do zwykłych danych binarnych:
- Git przechowuje pliki binarne w łatkach (
git diff --binary,git format-patch) jako dane skompresowane zlib i zakodowane tym alfabetem, ze znakiem długości na początku każdego wiersza. - Python od wersji 3.4 udostępnia funkcje
base64.b85encode()ib85decode(), których wynik jest zgodny z tym narzędziem. - Mercurial używa tego samego kodowania dla plików binarnych w różnicach w stylu Git.
Uwaga: RFC 1924 konwertuje cały 128-bitowy adres naraz, natomiast Git, Python i to narzędzie działają na grupach po 4 bajty, więc 16-bajtowa wartość daje inny wynik niż metoda z RFC.
Niepełne grupy końcowe
Gdy długość danych wejściowych nie jest wielokrotnością 4, ostatnia grupa jest uzupełniana bajtami zerowymi i kodowana, a z wyniku zachowuje się tylko pierwsze n + 1 znaków: 1 bajt daje 2 znaki, 2 bajty dają 3, a 3 bajty dają 4. Dekoder odwraca ten proces, więc znaki dopełnienia nie są potrzebne. W przeciwieństwie do z w Ascii85 ten wariant nie ma skrótu dla bajtów zerowych.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Specyfikacja
| Alfabet | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Rozmiar wyniku | 5 znaków na 4 bajty (125%) |
| Dopełnienie | Brak |
| Standard | Zestaw znaków RFC 1924 (Git, Python b85) |
| 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
Czy Base85 to to samo co Ascii85?
z i może być ujęty w ograniczniki Adobe. Do danych PDF i PostScript użyj strony Ascii85.Czy RFC 1924 był prawdziwym standardem?
Nie. To informacyjny dokument RFC opublikowany jako primaaprilisowy żart, który nigdy nie był używany do adresów IPv6. Jego zestaw znaków zyskał popularność później dzięki Git i Pythonowi.
O ile większy jest wynik Base85?
Czy Base85 można umieścić w JSON lub XML?
<, > i & trzeba zastąpić encjami. Base85 nie jest bezpieczny dla URL.