Pilih alfabet penerima
Mulai dengan format yang dibutuhkan oleh sistem penerima, bukan dengan nama yang terdengar paling kompak. Base64 menggunakan huruf, angka, plus dan slash dalam bentuk standarnya; beberapa konteks sebagai gantinya menentukan varian URL-safe Base64. Base32 menggunakan huruf kapital dan digit 2 melalui 7. Bitcoin-style Base58 mengecualikan karakter seperti nol, kapital O, kapital I dan huruf kecil l yang mudah disalahartikan ketika disalin dengan tangan. Alfabet yang berbeda dapat mewakili byte yang sama, tetapi penerima yang mengharapkan satu tidak akan secara otomatis mengenali yang lain. Ketiganya tidak mengenkripsi pesan. Tujuannya adalah representasi, sehingga siapapun dengan dekoder yang benar dapat mengembalikan byte asli.
Ikuti satu contoh kecil
Ambil teks ASCII Man, yang byte UTF-8-nya adalah heksadesimal 4D 61 6E. Standar Base64 menulis byte-byte ini sebagai TWFu. RFC 4648 Base32 menulis mereka sebagai JVQW4===, termasuk padding untuk menyelesaikan blok delapan karakternya. Alat Base58 yang terhubung mewakili byte yang sama menggunakan alfabet Bitcoin dan tidak sama dengan padding. Hasilnya terlihat berbeda karena alfabet membagi bit stream atau nilai integer secara berbeda; teks tidak berubah. Masukkan Man dalam encoder Base32 tertanam, lalu gunakan dekoder yang sesuai. Cobalah alat Base64 dan Base58 dengan input yang sama dan bandingkan output hanya setelah mendekodikannya kembali ke byte.
- UTF-8: Man → 4D 61 6E
- Base64: TWFu · Base32: JVQW4===
- Base58: alfabet yang berbeda; dekodi kembali ke Man
Padding, varian dan checksum
Spesifikasi Base64 dan Base32 membicarakan padding dengan tanda sama. Beberapa aplikasi sengaja menghindari padding, dan penerima mungkin memerlukan teks padded atau unpadded; sesuai dengan kontraknya dengan tepat. Base58 tidak memiliki padding yang sama dalam implementasi ini. Juga membedakan encoding Base58 biasa dari Bitcoin Base58Check: sebuah alamat Bitcoin termasuk informasi versi dan checksum sebelum representasi Base58. Konverter Base58 MultiVerto encodes teks UTF-8 dan tidak membangun alamat Bitcoin atau memvalidasi Base58Check checksum. Demikian pula, mengganti standar Base64 ke Base64URL mengubah rincian alfabet yang penting dalam URL. Sebuah token dengan varian yang salah dapat gagal meskipun byte yang mendasarinya adalah benar.
Periksa byte sebelum membandingkan string
Teks pertama menjadi byte di bawah encoding karakter. MultiVerto menggunakan UTF-8 untuk Base32 dan Base58 alat teks, sehingga sebuah huruf dengan aksen dapat memerlukan lebih dari satu byte. Hitung byte daripada karakter yang terlihat saat memperkirakan ukuran. Ruang kosong yang disalin ke sumber juga dapat mengubah hasil. Untuk mendiagnosis ketidakcocokan, rekam teks asli, byte UTF-8, alfabet yang disebut, kebijakan padding dan dekoder yang diharapkan. Dekodi keluaran kandidat dan bandingkan teks yang direkonstruksi. Jika aliran kerja Anda sebenarnya mengangkut berkas biner arbitrer bukan teks UTF-8, verifikasi bahwa alat penerima mempertahankan byte mentah; sebuah konverter teks-hanya bukan protokol berkas biner umum.
Ikuti representasi dalam spesifikasi penerima
Untuk sebuah bidang MIME, token API, QR payload atau identifikator tulisan tangan, baca spesifikasi yang relevan sebelum memilih alfabet. Base64 umum dalam pertukaran berorientasi mesin; Base32 dapat sesuai dengan huruf besar-kecil tidak sensitif atau alfabet terbatas; Base58 terkait dengan transkripsi manusia dalam sistem tertentu. Itu adalah kecenderungan, bukan jaminan. Jangan mengasumsikan bahwa encoding menambah integritas atau otentisitas: string dapat diubah kecuali format sekitarnya menyediakan checksum, tanda tangan atau perlindungan otentikasi. Simpan vektor tes pendek seperti Man dengan integrasi Anda, dan verifikasi kedua encoding dan decoding di batas di mana data meninggalkan aplikasi Anda. Pertanyaan yang menentukan adalah apakah penerima menerima karakter dan aturan yang tepat yang Anda keluarkan.