Lewati ke konten
DeepBase64

Mengapa base64 saya di-encode dua kali?

Anda men-decode sebuah string base64 dan mendapat string base64 lagi. Tidak ada yang rusak, dan Anda tidak salah: nilai itu memang di-encode lebih dari satu kali, dan setiap decode mengupas tepat satu lapisan.

Hampir tidak ada yang meng-encode dua kali dengan sengaja. Itu terjadi karena dua sistem sama-sama mengerjakan tugasnya tanpa tahu yang lain sudah melakukannya. Sebuah layanan meng-encode nilai sebelum memasukkannya ke suatu kolom; transport yang membawa seluruh pesan meng-encode itu juga. Sebuah secret Kubernetes berisi nilai yang sudah base64 ketika seseorang menempelnya ke YAML, dan YAML meng-encode-nya lagi. Sebuah webhook menandatangani muatan, meng-encode tanda tangannya, lalu rantai pengiriman meng-encode amplopnya. Sistem log meng-encode apa pun yang tidak bisa dijamin dapat dicetak, termasuk kolom yang sudah di-encode di hulu karena alasan yang sama.

Berapa lapisannya tidak bisa dilihat dari tampilannya. Keluaran base64 adalah masukan base64 yang sah, jadi nilai yang dibungkus sekali dan nilai yang dibungkus empat kali adalah jenis string yang sama. Satu-satunya petunjuk yang terlihat adalah panjang: setiap lapisan menambah teks sekitar sepertiga, sehingga nilai yang bersarang dalam menjadi mencolok besar.

Jalan keluarnya adalah men-decode berulang kali sampai hasilnya bukan base64 lagi. Dilakukan manual, itu berarti menempelkan setiap hasil kembali ke masukan dan kehilangan hitungan — karena itulah alat yang mengupas semua lapisan dalam satu langkah dan menyebutkan jumlahnya layak dipakai.

Ada satu jebakan dalam mengotomatiskannya, dan itu perlu diketahui apa pun alatnya: sebagian teks biasa juga merupakan base64 yang sah. Decoder yang terus mengupas selama masukan sekadar tampak bisa di-decode akan dengan senang hati mengubah kata seperti "Password" menjadi derau dan melaporkan lapisan yang tidak pernah ada. Berhenti dengan benar lebih sulit daripada men-decode, dan menyebut jumlah lapisan tanpa menilai tiap lapisan berarti menyebut tebakan.

Buka decoder