Bahasa Melayu

Alat pembangun · Pengekod & penyahkod Base64

Mengapa Base64 yang ditampal gagal untuk menyahkod: balut baris, baris baharu dan petikan pintar

· Mengapa ia penting

asas64 pengekodan

Rentetan Base64 sebelum dan selepas mengalih keluar pemisah baris, memangkas ruang kosong dan membaiki pemotongan
Ilustrasi vektor ToolAcre asal

Base64 jarang pecah dalam transit; ia pecah dalam papan keratan. Catatan ini mengkatalogkan ralat salin-tampal yang menghasilkan ralat aksara dan panjang yang tidak sah dan cara mengesan setiap ralat dengan cepat.

Kunci yang berfungsi di terminal dan gagal dalam pelayar — satu aksara yang tidak kelihatan dan carian selama dua jam

Seorang jurutera menyalin kunci API daripada terminal untuk mengujinya dalam skrip. Kunci berfungsi dengan baik dalam terminal tetapi gagal dengan aksara tidak sah apabila ditampal ke dalam alat pelayar. Dua jam kemudian, selepas mencari melalui kod, konfigurasi dan dokumentasi, mereka menemui satu watak yang tidak kelihatan. Baris baharu di hujung kekunci, ditambah dengan gema atau disalin daripada baris gesaan terminal, menjadi aksara tambahan yang memecahkan penyahkod Base64. Kuncinya betul; papan keratan tidak. Data Base64 boleh dipercayai apabila dihantar secara elektronik, dijumlahkan dan disahkan. Ia pecah hampir secara eksklusif semasa menyalin dan menampal manual.

Pembalut baris dalam terminal, mengekori baris baharu daripada output arahan, penggantian petikan pintar dalam editor teks kaya dan aksara Unicode tersembunyi daripada salin-tampal antara aplikasi yang berbeza semuanya memperkenalkan ralat yang kelihatan seperti Base64 rosak apabila masalah sebenar adalah dalam cara ia disalin. Catatan ini mengkatalogkan kesilapan yang paling biasa dan menunjukkan cara untuk mengesan dan membetulkan setiap satu dengan cepat. Abjad Base64 terdiri daripada huruf besar dan huruf kecil, digit, tanda tambah, garis miring dan aksara padding (tanda sama). RFC 4648 adalah khusus: rentetan Base64 standard mengandungi sahaja aksara tersebut ditambah ruang kosong pilihan jika garisan dibalut.

Pembalut baris daripada terminal, klien e-mel dan pemformatan PEM — mengapa pemecahan lajur 76 adalah baik untuk sesetengah penyahkod dan membawa maut bagi yang lain

Banyak alat bertolak ansur dengan penyelewengan: mereka menerima URL-varian selamat menggunakan sempang dan garis bawah bukannya tambah dan serong, atau mereka mengabaikan baris baharu. Penyahkod ketat yang mengikut RFC menolak apa-apa di luar set aksara yang dijangkakan dan gagal dengan ralat aksara yang tidak sah. Mesej ralat biasanya menamakan watak yang menyinggung perasaan atau nota bahawa rentetan itu tidak boleh dinyahkod sama sekali. Apabila menampal Base64 daripada e-mel, terminal, sejarah sembang atau dokumen yang diformatkan, aksara yang tidak kelihatan atau penggantian aksara sering tergelincir dan menyebabkan penyahkodan gagal. Data itu sendiri baik; pemindahan papan keratan telah merosakkannya.

Pembalut talian ialah sumber yang paling biasa bagi kegagalan Base64 yang ditampal, dan juga yang paling mudah diperbaiki. Alat terminal membalut output pada 76 aksara setiap baris atau kadangkala 80, memasukkan baris baharu dan meneruskan pada baris seterusnya. Banyak pengekod, termasuk beberapa perpustakaan pengekodan Base64, membalut output mereka pada sempadan aksara 76 yang sama untuk keserasian dengan e-mel MIME. Apabila anda menyalin rentetan Base64 yang dibalut dari terminal, baris baharu akan datang.

Mengekori baris baharu daripada alat gema dan papan keratan — bait tambahan yang menjadi watak tambahan

Sesetengah penyahkod menerima dan mengabaikan baris baharu secara automatik. Orang lain menolaknya sebagai aksara tidak sah. Penyelesaiannya adalah untuk mengalih keluar semua baris baharu dan ruang kosong. Jika rentetan Base64 dibalut merentasi berbilang baris dalam terminal, pilih semua baris, salinnya ke dalam editor dan padamkan semua baris baharu.

Salin rentetan satu baris yang terhasil dan tampalkannya ke dalam penyahkod. Ini adalah perkara pertama yang perlu dicuba apabila tampal gagal. Mengekori baris baharu daripada utiliti gema dan papan keratan adalah satu lagi punca biasa. Perintah gema $API_KEY mencetak kekunci diikuti dengan baris baharu, iaitu kelakuan standard arahan. Jika anda menyalin output itu secara langsung, baris baharu disertakan dalam salinan. Sesetengah terminal menambah baris baharu tambahan apabila anda menyalin dan sesetengah pengurus papan keratan mengekalkan atau menduplikasi baris baharu. Gejalanya adalah sama seperti pembalut baris: aksara tambahan pada penghujung rentetan yang bukan milik Base64.

Petikan pintar, ruang tidak putus dan aksara lebar sifar — cara editor teks kaya menulis semula teks biasa

Pembetulannya adalah sama mudah: potong hujung rentetan yang ditampal dalam editor anda sebelum cuba menyahkod. Alih keluar ruang kosong di hadapan dan di belakang serta mana-mana aksara yang kelihatan seperti baris baharu. Jika rentetan itu cukup pendek, anda boleh menaipnya semula secara manual, tetapi untuk kekunci panjang, pemangkasan manual yang berhati-hati adalah lebih pantas. Petikan pintar, ruang tidak pecah dan penggantian Unikod lain adalah perangkap halus. Penyunting teks kaya seperti Word secara automatik menukar petikan lurus kepada petikan kerinting, menukar tiga tanda sempang kepada em-dash dan menukar jujukan ruang tertentu kepada ruang tidak putus. Jika seseorang menampal rentetan Base64 ke dalam dokumen dan kemudian anda menyalinnya daripada dokumen yang diformatkan ke dalam alat, penggantian tersebut akan disertakan.

Petikan berganda lurus (") menjadi pasangan kiri dan kanan kerinting, kedua-duanya tidak sah Base64. Ruang tidak putus (U+00A0) kelihatan sama dengan ruang biasa tetapi mempunyai kod aksara yang berbeza dan tidak dikenali sebagai ruang kosong oleh semua penghurai. Penyelesaiannya adalah untuk menampal ke dalam editor teks biasa terlebih dahulu, yang membuang semua pemformatan teks, dokumen atau tampal daripada editor Word terlebih dahulu. HTML textarea dan semak aksara ganjil Kemudian salin daripada versi teks biasa untuk digunakan dalam alat anda.

Pemotongan dan kehilangan padding — panjang-modulo-4 semak yang memberitahu anda tiada aksara

Pemangkasan berlaku apabila rentetan terputus semasa menyalin atau menampal. Rentetan Base64 yang sangat panjang mungkin melebihi had papan keratan pada sesetengah sistem atau gagal untuk menyalin disebabkan oleh pepijat aplikasi. Hasilnya ialah rentetan yang lebih pendek yang tidak lengkap. Rentetan Base64 mesti mempunyai panjang yang merupakan gandaan empat selepas padding digunakan. Jika panjang bukan gandaan empat, ia dipotong atau rosak. Mesej ralat biasanya menyatakan bahawa panjang rentetan tidak sah atau aksara tiada. Pembetulan memerlukan mengetahui perkara yang disalin pada asalnya.

Jika anda boleh menyemak semula sumbernya, salin semula dengan teliti. Jika tidak, pemangkasan tidak dapat dipulihkan. Kehilangan padding ialah isu yang berkaitan: Pelapik Base64 dengan tanda yang sama kadangkala dilucutkan untuk menjimatkan beberapa bait. Sesetengah aplikasi meninggalkan padding dan sesetengahnya memerlukannya. Jika rentetan pada asalnya empuk dan padding itu hilang, tambahkannya semula. Rentetan Base64 harus mempunyai tanda mengekor 0, 1 atau 2 sama sehingga jumlah panjang adalah gandaan empat. Jika ia tiada dan panjangnya bukan gandaan empat, padding mungkin telah hilang.

Contoh yang berjaya: membaiki rentetan yang dibalut dan dipotong — membersihkannya langkah demi langkah sehingga ia dinyahkod

Contoh yang berjaya menunjukkan pembaikan ini langkah demi langkah. Katakan kunci API yang disalin muncul seperti ini dalam editor anda: VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0Cg==. Mulakan dengan mengenal pasti isu. Cg mengekor== adalah ganjil; Cg ialah base64 untuk aksara baris baharu (hex 0A), dan == tambahan mencadangkan sesuatu telah ditambahkan. Alih keluar Cg == dan cuba sahaja VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0. Itu masih tidak betul; panjangnya ialah 37 aksara, bukan gandaan empat. Potong lagi: VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 (35 aksara, masih salah). Semak sumber asal. Rentetan yang betul ialah VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0 (32 aksara) dengan pelapik yang betul: VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0. Tambahnya: VGhpcyBpcyBub3QgcmVhbGx5IGEgc2VjcmV0=.

Uji dalam penyahkod. Ini menyahkod kepada Ini sebenarnya bukan rahsia. Pada setiap langkah, gunakan pengekod & penyahkod Base64 untuk menguji rentetan semasa, membetulkan isu yang dikenal pasti dan menguji sekali lagi sehingga menyahkod. Rasuah di dalam bait Base64 itu sendiri tidak boleh diperbaiki oleh penyahkod. Jika bait sebenarnya rosak dalam transit, penghantaran atau storan, Base64 sendiri tidak dapat mengesannya. RFC menentukan aksara yang sah; mana-mana watak di luar set itu adalah tugas penyahkod untuk ditangkap. Sebarang rasuah bait, seperti 0 menjadi 1 di tengah-tengah aksara Base64, menghasilkan kod aksara yang berbeza sepenuhnya dan tidak dapat dikesan oleh Base64 sahaja.

Perkara ini tidak meliputi - rasuah dalam bait yang dikodkan, yang Base64 sendiri tidak dapat mengesan

Checksum atau tandatangan digital digunakan untuk mengesan jenis rasuah ini, dan ia mesti dikira pada data binari asal sebelum pengekodan Base64. Jika anda menyahkod rentetan Base64 dan hasilnya adalah sampah atau berbeza daripada yang anda jangkakan, rasuah berlaku sebelum pengekodan atau semasa penghantaran, bukan semasa langkah salin-tampal. Ini jarang berlaku dalam amalan. Kebanyakan kegagalan adalah isu salin-tampal seperti di atas. Pendekatan sistematik untuk menyahpepijat kegagalan salin-tampal Base64 adalah untuk menguji setiap isu yang berpotensi mengikut urutan. Mula-mula, alih keluar semua ruang kosong dan baris baharu. Kemudian potong ruang hadapan dan belakang serta sebarang watak sesat.

Kemudian semak modulo empat panjang dan tambah padding jika perlu. Tampalkan setiap versi ke dalam pengekod & penyahkod Base64 dan lihat jika ia menyahkod. Jika semakan panjang gagal, tanya sama ada rentetan telah dipotong dan dapatkannya daripada sumber asal. Jika semakan abjad gagal dan anda melihat aksara luar biasa, cari petikan pintar atau penggantian Unikod dan gantikannya dengan ASCII setara. Gunakan alat dalam talian yang menunjukkan kepada anda aksara yang tidak sah mengikut nama supaya anda boleh mengenal pasti dan mengalih keluarnya. Pengekod & penyahkod Base64 melakukan ini untuk setiap aksara yang tidak sah, dengan menyatakan dengan tepat aksara mana yang tiada dalam abjad.

Bawa pulang: semak panjang dan abjad sebelum menyalahkan data — cara pengekod & penyahkod Base64 memberi anda tempat tempatan yang pantas untuk menguji setiap pembaikan

Gunakan maklum balas itu untuk membetulkan setiap aksara dan teruskan sehingga rentetan dinyahkod. Pencegahan lebih mudah daripada debugging. Apabila anda tahu anda memerlukan rentetan Base64 sekali lagi, salinnya dengan cara yang mengekalkan pemformatan. Jangan tampalkannya ke dalam dokumen teks kaya. Simpannya dalam fail teks biasa atau kawasan teks yang ditetapkan yang tidak membuat penggantian. Jika seseorang menghantar rentetan Base64 kepada anda dalam mesej yang diformatkan, minta mereka menghantarnya semula dalam pemformatan kod atau teks biasa. Jika anda mesti menyalin daripada sumber berformat, tampal ke dalam editor teks biasa dahulu dan sahkan rentetan sebelum menggunakannya.

Uji rentetan dalam pengekod & penyahkod Base64 sebaik sahaja anda memilikinya, sebelum anda bergantung padanya. Jika gagal, anda boleh meminta salinan baharu sementara sumber masih boleh diakses. Jika anda menunggu sehingga rentetan itu lama atau sumbernya hilang, membetulkan pemotongan atau rasuah menjadi mustahil. Pengekod & penyahkod Base64 memberi anda tempat tempatan yang pantas untuk menguji sebarang rentetan sebelum membuat komitmen untuk menggunakannya. Uji awal dan uji kerap supaya kegagalan salin-tampal ditangkap serta-merta.