Konverter Base32 / Base58

Encode teks atau dekode string terkode dalam tujuh skema: RFC 4648 Base32 (A-Z2-7), base32hex (0-9A-V), Crockford Base32, z-base-32, Base58 Bitcoin, Base58 Flickr, dan Base58 Ripple. Ada juga generator dan verifikator Base58Check mandiri (byte versi + checksum SHA-256 ganda) di bawah konverter. Teks diproses sebagai byte UTF-8. Juga: Base64 | Ascii85 | Hex Text.
Semua pemrosesan berlangsung secara lokal di browser — data tidak pernah diunggah ke server mana pun.
Cara kerja: Setiap karakter diubah menjadi byte UTF-8, lalu setiap skema mengemas byte tersebut ke dalam alfabet cetaknya sendiri.
Skema:
Cara kerja: String terkode didekode kembali menjadi byte UTF-8 dan ditampilkan sebagai teks. Spasi dan padding = di akhir diabaikan; karakter tidak valid dilaporkan beserta posisinya.
Skema:
Ctrl+Enter di input menjalankan mode yang aktif.
Pilih Encode atau Decode, pilih skema, dan klik tombol aksinya. Semua pemrosesan tetap di browser.

Encoder Base58Check: Byte versi (hex): Payload (hex):
Verifikator Base58Check: Alamat atau string:
Base58Check adalah format alamat Bitcoin: satu byte versi, payload, lalu empat byte pertama SHA-256 yang diterapkan dua kali pada byte versi dan payload bersama-sama. Encode menulis string itu; Verify membacanya kembali dan melaporkan byte mana yang salah ketika checksum tidak cocok.
Tentang setiap skema:
Base32 (RFC 4648) — alfabet klasik yang tidak peka huruf besar-kecil A-Z 2-7; 8 byte menjadi 13 karakter ditambah padding. Banyak digunakan untuk rahasia HOTP/TOTP, DNSSEC, dan checksum file. Padding = opsional ditambahkan kecuali dimatikan.
Base32 Hex — alfabet yang diperluas 0-9 A-V yang terurut secara alami menurut urutan leksikografis dan nyaman bila nilai terkode juga dipakai sebagai pengenal mirip hex.
Base58 (Bitcoin) — Base64 tanpa 0 O I l + / sehingga output tidak pernah memuat karakter yang ambigu. Ini adalah alfabet yang dipakai untuk alamat Bitcoin. Byte nol di depan menjadi digit 1.
Base58 (Flickr) — alfabet URL pendek Flickr, yang peka huruf besar-kecil dengan urutan kebalikan: digit, huruf kecil, lalu huruf besar.
Crockford Base32 — digit dan huruf yang tidak ambigu 0-9 A-Z dengan I, L, O, dan U dibuang. Dekoding juga menerima I dan L sebagai 1, O sebagai 0, huruf kecil, dan tanda hubung sebagai hiasan. Simbol cek opsional modulo 37 dapat ditambahkan.
z-base-32 — kelompok lima bit yang sama dengan RFC 4648 Base32, dengan alfabet diurutkan ulang sehingga karakter yang paling sering diketik orang adalah yang paling mudah ditulis. Tanpa padding dan tanpa simbol cek.
Base58 (Ripple / XRP) — urutan ketiga dari 58 karakter yang sama, dipakai oleh XRP Ledger. Karakter pertamanya adalah r, itulah sebabnya alamat Ripple diawali huruf tersebut.
Base58Check — string Base58 yang payload-nya membawa empat byte checksum, sehingga alamat yang salah ketik dapat ditolak alih-alih diam-diam mengirim dana ke tempat lain. Ada generator dan verifikator mandiri di bawah konverter.
Apa itu Base32 dan Base58?

Keduanya adalah dua jawaban untuk satu pertanyaan: saluran yang membawa teks diminta membawa byte. Base32 dan Base58 bukan enkripsi dan bukan hashing — keduanya tidak menyembunyikan apa pun dan tidak memperpendek apa pun. Mereka menulis ulang string byte menggunakan himpunan karakter yang tetap dan mudah dibaca, dan siapa pun yang tahu himpunan mana yang dipakai dapat langsung membalikkannya. Satu-satunya alasan memilih salah satu di atas yang lain adalah apa yang dilakukan pihak penerima terhadap karakter-karakternya.

Dua keluarga melakukan penulisan ulang itu dengan cara yang sama sekali berbeda, dan perbedaannya menjelaskan hampir setiap kejutan di halaman ini:

  • Pengemasan bit — Base32, Base32 Hex, Crockford Base32, z-base-32. Byte dipotong menjadi grup tetap dan setiap lima bit menjadi satu karakter. Panjang output dapat diprediksi dari panjang input, dan grup terakhir yang terisi sebagian ditandai dengan karakter padding atau dibiarkan pendek.
  • Konversi bilangan besar — setiap tabel Base58. Seluruh string byte dibaca sebagai satu bilangan yang sangat besar dalam basis 256 dan ditulis ulang dalam basis 58. Tidak ada grup dan tidak ada padding; panjangnya tidak terbagi menjadi apa pun, dan setiap byte nol di depan menjadi satu simbol nol di depan.
Ke mana enam bit pembawa data pergi: Base32 menghabiskan lima bit per karakter, sehingga membutuhkan delapan karakter untuk setiap lima byte input — sekitar 60% lebih besar. Base58 menghabiskan sekitar 5,86 bit per karakter, sehingga berada sekitar 37% lebih besar. Base64 memuat enam bit per karakter dan berada di 33%. Alfabet yang lebih besar lebih pendek tetapi lebih sulit dibacakan keras-keras, dan itulah pertukaran yang diambil masing-masing.
Tujuh alfabet di halaman ini

Setiap alfabet ditampilkan lengkap alih-alih dideskripsikan, karena dua alat yang mencetak karakter berbeda dengan nama yang sama tidak akan sepakat satu sama lain, apa pun labelnya. Baris RFC 4648 bersifat normatif; baris Crockford dan z-base-32 mengikuti yang dipublikasikan penulis format; ketiga baris Base58 adalah konvensi yang meluas dan bukan standar, itulah sebabnya dicantumkan secara terpisah.

Crockford Base32 dan simbol cek modulo 37

Alfabet membuang I, L, O, dan U sehingga tidak ada simbol yang bisa terbaca sebagai simbol lain. Yang tersisa tidak peka huruf besar-kecil saat dibaca: i dan l dibaca sebagai digit 1, o dibaca sebagai digit 0, dan tanda hubung hanya ada agar string panjang lebih mudah dibaca. Selain itu format ini mendefinisikan simbol cek opsional, yaitu nilai string simbol dibaca sebagai bilangan basis 32 lalu diambil modulo 37, dan ditulis dengan lima simbol tambahan untuk nilai 32 sampai 36.

Simbol cek dihitung dari string simbol, bukan dari byte: karena encoder menambahkan nol di depan grup terakhir, mendekode karakter yang sama selalu kembali ke nilai yang sama. Itulah sebabnya nilai cek dalam tabel dapat direproduksi dengan tangan hanya dari kolom terkode. Lima simbol tambahan adalah *, ~, $, =, dan U untuk nilai 32, 33, 34, 35, dan 36, sehingga simbol cek tidak selalu berupa angka atau huruf.

z-base-32

z-base-32 mempertahankan pengemasan lima bit dari RFC 4648 Base32 dan hanya mengubah urutan ketiga puluh dua karakternya. Urutannya dipilih agar karakter yang paling mungkin perlu dituliskan seseorang adalah yang paling mudah ditulis dan paling sulit tertukar. Formatnya tidak memiliki padding, sehingga pembaca harus tahu berapa simbol yang diharapkan dalam sebuah nilai; itulah harga dari format yang dirancang untuk dibaca dengan tangan terlebih dahulu.

Base58Check: satu byte versi, payload, empat byte checksum

Base58 sendiri tidak punya cara membedakan string yang salah ketik dari yang benar, karena hampir setiap kombinasi dari lima puluh delapan karakternya adalah bilangan yang valid. Base58Check memperbaikinya dengan membungkus data di dalam pembungkus: satu byte versi, lalu payload, lalu empat byte pertama SHA-256 yang diterapkan dua kali berturut-turut pada dua bagian pertama. Program penerima menghitung ulang empat byte itu dan menolak string tersebut ketika berbeda. Byte versi itulah yang memberi tahu dompet apakah ia sedang melihat alamat pembayaran, alamat skrip, atau kunci privat.

Generator di bawah konverter menerima byte versi dan payload dalam heksadesimal dan menulis string Base58Check; verifikator membacanya kembali, memisahkan empat byte checksum, menghitungnya ulang, dan melaporkan checksum yang ditemukan serta yang diharapkan. Checksum yang tidak cocok berarti string salah ketik atau berubah — itu tidak pernah berarti payload-nya yang salah, karena payload tidak pernah diinterpretasikan.

Kesalahpahaman umum
  • "Base64 adalah enkripsi." Tidak. Tidak ada kunci dan tidak ada rahasia; output dapat dibalik oleh siapa pun. Base32 dan Base58 berada dalam posisi yang sama, dan memindahkan nilai melalui ketiganya juga tidak menambah perlindungan.
  • "String Base58 adalah alamat Bitcoin." Hanya jika juga lolos checksum Base58Check dan membawa byte versi yang dikenali perangkat lunak penerima. String Base58 muncul di banyak tempat lain, termasuk pengenal biasa tanpa checksum sama sekali.
  • "Ketiga alfabet Base58 dapat saling menggantikan." Mereka memakai lima puluh delapan karakter yang sama dalam tiga urutan berbeda, sehingga byte yang sama menghasilkan tiga string yang berbeda. Sebuah alat harus diberi tahu mana yang digunakan, dan halaman ini selalu menyebutkan alfabet yang dipakainya.
  • "Padding adalah bagian dari nilai." Karakter = hanya menandai grup terakhir. Dua string Base32 yang hanya berbeda pada padding-nya menggambarkan byte yang sama, itulah sebabnya dekoder menerima string yang padding-nya dipotong.
  • "Karakter apa pun bisa dipakai." Setiap alfabet adalah himpunan tetap. Karakter dari luar himpunan tidak memiliki nilai, sehingga dekoder berhenti dan menyebut karakter beserta posisinya alih-alih menebak.
Pertanyaan yang sering muncul

Mengapa Base32 memakai 2-7 dan bukan 0-9? Karena RFC 4648 memilih alfabet agar tetap berada dalam karakter yang boleh dipakai nama domain, dan agar mudah dibacakan keras-keras. Base32 Hex memakai 0-9 A-V sebagai gantinya bila pengurutan alami lebih penting.

Mengapa string Base58 sering diawali 1? Setiap byte nol di depan input menjadi satu 1 di depan (karakter pertama alfabet Bitcoin dan Flickr). Byte versi 0x00 adalah satu byte nol, sehingga sebagian besar alamat mainnet Bitcoin diawali tepat satu 1.

Apa yang dimuat tombol Contoh? Contoh yang sesuai dengan skema dan arah yang sedang ditampilkan, bukan teks tetap. Encoder diberi teks contoh milik skema itu — vektor RFC 4648 bagian 10 untuk Base32 dan Base32 Hex, 12345 milik Crockford, baris z-base-32 yang dicetak di atas — dan dekoder diberi string terkode untuk alfabet yang dipilih, dan itulah yang membuat contoh berguna di kedua arah. Tiga baris Base58 membawa teks yang sama dengan sengaja, sehingga mengganti skema dan menekan Contoh lagi menampilkan ketiga urutan dari lima puluh delapan karakter yang sama berdampingan. Dengan simbol cek Crockford dicentang, dekoder diberi nilai dengan simbol di ujungnya, dan itulah satu-satunya cara untuk melihat verifikator menerima satu simbol.

Apakah halaman ini mengirim data ke mana pun? Tidak. Setiap konversi berlangsung di tab browser ini, dan halaman tidak berisi panggilan jaringan apa pun. Itulah sebabnya halaman ini juga bekerja ketika file dibuka langsung dari disk.

Mana yang sebaiknya dipakai untuk rahasia? Rahasia authenticator TOTP dan HOTP biasanya berupa Base32 dalam alfabet RFC 4648, karena rahasia itu harus diketik dengan tangan. Gunakan yang diminta perangkat lunak penerima, dan jangan pernah mengandalkan pengodean itu sendiri untuk kerahasiaan.