Encoder dan Decoder Base85

Ubah teks, byte hex, atau file menjadi Base85 dan sebaliknya. Halaman ini memakai set karakter RFC 1924, varian yang dihasilkan Python b85encode dan dipakai dalam patch biner Git.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Pilih Enkode untuk mengubah teks atau byte menjadi Base85, atau Dekode untuk mengubah Base85 kembali menjadi data.
  2. Ketik atau tempel masukan Anda, atau klik Buka file. Atur Masukan sebagai ke Hex jika Anda bekerja dengan byte mentah.
  3. Hasilnya diperbarui saat Anda mengetik. Saat mendekode, pilih keluaran Teks atau Hex sesuai isi datanya.
  4. Salin hasilnya atau unduh sebagai file.

Apa itu Base85?

Base85 adalah keluarga pengodean yang mengubah setiap 4 byte menjadi 5 karakter. Lima digit basis 85 dapat menampung 85 × 85 × 85 × 85 × 85 = 4.437.053.125 nilai, cukup untuk bilangan 32 bit mana pun, sehingga keluarannya hanya 25% lebih besar daripada masukan, dibandingkan 33% pada Base64.

Ada beberapa alfabet Base85 dan semuanya tidak dapat saling menggantikan: Ascii85 (Adobe, PDF), Z85 (ZeroMQ), dan alfabet di halaman ini. Alfabet ini memakai 0-9, A-Z, a-z, dan 23 simbol: !#$%&()*+-;<=>?@^_`{|}~. Tanda kutip, koma, titik, garis miring, titik dua, garis miring terbalik, dan kurung siku tidak dipakai.

RFC 1924, Git, dan Python

Set karakter ini berasal dari RFC 1924, "A Compact Representation of IPv6 Addresses", yang diterbitkan pada 1 April 1996 sebagai lelucon April Mop. RFC tersebut mengusulkan penulisan alamat IPv6 128 bit sebagai satu bilangan basis 85 yang panjangnya tepat 20 karakter. Tidak ada yang menulis alamat IPv6 dengan cara itu, tetapi alfabetnya kemudian dipakai ulang untuk data biner umum:

  • Git menyimpan file biner dalam patch (git diff --binary, git format-patch) sebagai data terkompresi zlib yang dienkode dengan alfabet ini, dengan satu karakter panjang di awal setiap baris.
  • Python 3.4 dan yang lebih baru menyediakan base64.b85encode() dan b85decode(), yang keluarannya sama dengan alat ini.
  • Mercurial memakai pengodean yang sama untuk file biner dalam diff bergaya Git.

Perlu dicatat bahwa RFC 1924 mengonversi seluruh alamat 128 bit sekaligus, sedangkan Git, Python, dan alat ini bekerja dalam kelompok 4 byte, sehingga nilai 16 byte memberikan hasil yang berbeda dari metode RFC.

Kelompok akhir yang pendek

Jika panjang masukan bukan kelipatan 4, kelompok terakhir diisi byte nol, dienkode, lalu hanya n + 1 karakter pertama yang disimpan: 1 byte menjadi 2 karakter, 2 byte menjadi 3, dan 3 byte menjadi 4. Decoder membalik proses ini, sehingga tidak diperlukan karakter padding. Varian ini tidak memiliki singkatan untuk byte nol, berbeda dengan z pada Ascii85.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

Spesifikasi

Alfabet0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Ukuran keluaran5 karakter per 4 byte (125%)
PaddingTidak ada
StandarSet karakter RFC 1924 (Git, Python b85)
Peka huruf besar-kecilYa

Contoh

Masukan (UTF-8)Keluaran
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

Pertanyaan yang sering diajukan

Apakah Base85 sama dengan Ascii85?
Keduanya memakai aritmetika yang sama tetapi karakter yang berbeda, sehingga keluarannya berbeda. Ascii85 juga menyingkat empat byte nol menjadi z dan dapat diapit pembatas Adobe. Gunakan halaman Ascii85 untuk data PDF dan PostScript.
Apakah RFC 1924 standar sungguhan?

Bukan. RFC ini bersifat informasional, diterbitkan sebagai lelucon April Mop, dan tidak pernah dipakai untuk alamat IPv6. Set karakternya baru populer belakangan melalui Git dan Python.

Seberapa besar keluaran Base85?
Setiap 4 byte menjadi 5 karakter, sehingga keluarannya 1,25 kali masukan. Base64 sekitar 1,33 kali. basE91 sedikit lebih ringkas lagi.
Bisakah Base85 dimasukkan ke JSON atau XML?
Untuk JSON, bisa: alfabetnya tidak memuat tanda kutip ganda atau garis miring terbalik, sehingga tidak ada yang perlu di-escape. Di XML dan HTML, karakter <, >, dan & harus di-escape. Base85 tidak aman untuk URL.