Dekoder Rantai Enkoding — Setiap Lapisan Diberi Nama, Setiap Tebakan Diberi Label
Dekoder Rantai Encoding
Teks yang telah melewati lebih dari satu enkoder adalah kasus yang normal, bukan yang eksotis: badan JSON di dalam token Base64, URL di dalam baris log, nilai formulir yang di-escape persen lalu di-enkode Base64 agar dapat dikirim di header. Halaman ini membuka lapisan-lapisan tersebut satu per satu, menyebutkan teknik yang dipakai di setiap langkah, menampilkan tingkat keyakinannya beserta alasannya, dan mencantumkan teknik yang ditolak pada langkah itu sehingga Anda dapat tidak setuju dengannya.
Halaman berhenti ketika teks tidak lagi tampak terenkode, ketika mencapai batas langkah, atau ketika langkah berikutnya akan mengembalikan teks yang sudah pernah muncul. Tidak ada yang ditebak diam-diam: teknik yang alfabetnya tumpang tindih dengan kata-kata biasa tidak pernah diterapkan sendirian, hanya ditawarkan.
Semua pemrosesan berlangsung secara lokal di browser — data tidak pernah diunggah ke server mana pun.
Hanya terapkan lapisan sendirian jika keyakinannya minimal:
Berhenti setelah
Menjalankan batas lapisan di atas sekaligus. Tabel yang sama dibangun dengan cara apa pun, sehingga Anda dapat beralih ke langkah demi langkah kapan saja.
Atau pilih teknik secara manual:
Daftar ini adalah apa yang dapat dilihat halaman dalam teks saat ini. Cipher rotasi selalu ada di dalamnya, karena tidak dapat dideteksi sama sekali; begitu pula apa pun yang baru dapat dikenali setelah spasi kosong dibuang dari teks yang terbungkus, yang ditandai sebagai demikian dan tidak pernah diterapkan sendirian.
Teks terenkode
Masukan ini lebih panjang dari yang biasanya dijalankan halaman ini tanpa bertanya, dan perkiraan di atas menyatakan ia mungkin memerlukan . Klik Buka seluruh rantai sekali lagi untuk tetap melanjutkan, atau persingkat teks terlebih dahulu.
Apa yang dilihat halaman dalam teks saat ini
(ketik atau tempel sesuatu terlebih dahulu)
(rantai akan muncul di sini)
Lapisan, sesuai urutan saat dibuka
#
Teknik
Keyakinan
Masukan → hasil
Ukuran
Mengapa yang ini
Per lapisan
Salin mengambil teks seperti keadaannya setelah lapisan itu. Batalkan menghapus lapisan itu dan setiap lapisan di atasnya, yaitu cara membatalkan lebih dari satu langkah sekaligus.
Hasil setelah0lapisan(belum ada)
Apa itu rantai enkoding, dan mengapa ia memerlukan dekodernya sendiri?
Sebuah lapisan adalah satu enkoder yang diterapkan pada teks. Sebuah rantai adalah dua atau lebih yang diterapkan satu demi satu. Hampir setiap contoh sehari-hari terlihat seperti ini: seseorang perlu memasukkan data biner — gambar, token bertanda tangan — ke tempat yang hanya membawa teks, sehingga data itu di-Base64. Hasil Base64 itu kemudian harus dibawa di URL, sehingga di-escape persen. Seluruh URL itu lalu dimasukkan ke baris log atau file konfigurasi, sehingga tanda garis miring terbalik atau tanda kutip juga di-escape. Yang terlihat ketika masalah muncul adalah lapisan terluar, dan lapisan itu tidak terbaca hanya karena lapisan-lapisan di dalamnya masih terpasang.
Dekoder tunggal tidak banyak membantu dalam hal itu. Dekoder Base64 yang diberi JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC akan menghasilkan jawaban yang benar namun tetap tidak terbaca, karena escape persen dan referensi karakter masih berada di atas teks yang diinginkan. Yang sebenarnya dibutuhkan adalah sesuatu yang memutuskan, di setiap langkah, enkoder mana yang harus dilepas — dan halaman ini adalah keputusan itu yang dibuat terlihat.
Enkoding bukan enkripsi, dan halaman ini tidak memecahkan apa pun. Setiap teknik di halaman ini adalah cara publik dan dapat dibalik untuk menuliskan informasi yang sama. Base64 tidak memiliki kunci. Escape persen tidak memiliki kunci. Jika lapisan terdalam terenkripsi, halaman ini akan membuka lapisan luar dan menyerahkan ciphertext, yang akan dinyatakannya dengan jelas alih-alih berpura-pura sebagai hasil. Tidak ada yang dijalankan di sini dan tidak ada yang disembunyikan.
Contoh-contoh yang dikerjakan di halaman ini
Setiap baris di bawah adalah masukan nyata dari file data halaman ini, dan kolom tengah adalah apa yang ditemukan pembuka lapisan halaman di dalamnya. Kolom terakhir adalah teks yang tersisa ketika berhenti.
Apa masukannya
Lapisan yang ditemukan
Masukan, dikutip seperti saat tiba
Yang tersisa saat berhenti
Baris-baris ini dirender oleh halaman dari daftar kasusnya sendiri dan dijalankan ulang setiap kali halaman dibuka, sehingga tidak dapat menyimpang dari apa yang dilakukan kode. Uji mandiri di bawah memeriksa setiap baris.
Bagaimana halaman memutuskan lapisan mana yang akan dibuka
Lihat bentuknya, bukan maknanya. Setiap teknik memiliki tanda tangan — escape persen, deretan digit heksadesimal genap, atau alfabet dan panjang yang sesuai dengan Base64. Halaman mendaftar setiap teknik yang cocok dengan teks, dengan tingkat keyakinan antara 0 dan 1.
Dekode, lalu periksa apakah hasilnya berupa teks. Sebuah teknik hanya layak diterapkan jika menghasilkan sesuatu yang dapat dibaca. Setiap kandidat benar-benar dijalankan, dan keluarannya dinilai dari seberapa banyak karakter yang dapat dicetak.
Terapkan hanya yang lolos ambang, urut dari keyakinan tertinggi. Kandidat dengan keyakinan tertinggi di atas ambang yang dipilih diterapkan, lalu prosesnya diulang pada hasilnya. Di bawah ambang, teknik hanya didaftar dan tidak diterapkan.
Satu aturan tambahan di halaman ini. Meskipun sebuah teknik lolos ambang, halaman ini tidak akan menerapkannya sendirian kecuali hasilnya benar-benar teks yang dapat dibaca — karakter pengganti dan karakter kontrol dihitung sebagai tidak dapat dibaca. Tanpa aturan itu, kata biasa cafe akan didekode menjadi tiga byte yang hanya dapat dicetak dalam Latin-1, dan getUserName akan didekode menjadi delapan byte derau. Detektornya benar bahwa string-string itu sesuai dengan alfabet; halaman ini memutuskan bahwa kesesuaian alfabet saja tidak cukup. Teknik tersebut tetap dapat diterapkan secara manual, dan daftar kandidat menjelaskan bahwa halaman menolak serta alasannya.
Berhenti dengan sengaja. Ketika tidak ada teknik yang lolos ambang, ketika teks berhenti berubah, ketika batas langkah tercapai, atau ketika langkah berikutnya akan memunculkan kembali teks yang sudah muncul dalam rantai ini. Yang terakhir itu penting: ROT13 adalah inversnya sendiri, sehingga rantai yang dibiarkan mengambil langkah itu dua kali tidak akan pernah berakhir.
Teks yang terbungkus ditawarkan, tidak pernah diterapkan. Jika teks terpotong di beberapa baris, detektor melihat spasi kosong, membaca prosa biasa, dan tidak menemukan apa-apa. Jadi halaman membuang spasi kosong dari salinan teks, meminta detektor lagi, dan menawarkan apa pun yang ditemukannya sebagai langkah yang dipilih secara manual. Membuang spasi kosong dari teks berarti menulis ulang teks itu, dan halaman ini tidak menulis ulang apa pun yang tidak diminta.
Apa yang tidak akan dilakukan halaman ini
Halaman hanya mendekode, dan tidak melakukan hal lain. Teks yang ditempel tidak pernah dijalankan: tidak ada eval, tidak ada new Function, tidak ada injeksi skrip, tidak ada pembukaan dokumen. Teks itu tidak pernah dikirim ke mana pun: tidak ada unggahan, tidak ada permintaan, tidak ada analitik. Selain slot iklan di bagian bawah halaman dan baris tombol berbagi (hanya dua widget pihak ketiga yang dimuat halaman ini), tidak ada font atau skrip yang diambil dari host lain. Keluaran hasil dekode ditulis ke halaman sebagai teks, sehingga tag HTML yang muncul dari suatu lapisan ditampilkan sebagai tag, bukan diubah menjadi tag. Semua itu dapat diverifikasi: tekan Uji mandiri dan halaman ini memeriksa sumbernya sendiri untuk konstruksi tersebut, lalu gagal jika menemukannya.
Apa yang dapat dikenali, dan apa yang tidak
Teknik
Seberapa yakin, jika berdiri sendiri
Tangkapan
Teks yang dikutip di halaman ini ditulis untuk situs ini. Alfabet Base64, Base32, Base58, Base91 dan quoted-printable serta format blok uuencode adalah yang sudah dipublikasikan; dekodingnya mengikuti definisi tersebut, bukan keanehan alat tertentu. Vektor referensi untuk alfabet tersedia di halaman saudara, yang memuat vektor uji RFC 4648.
Teks yang terbungkus dalam beberapa baris
Blob yang pernah melewati pesan email, file PEM, token di header, atau hash yang disalin dari terminal biasanya terbungkus: enkoder memotongnya pada kolom tetap — 76 karakter adalah konvensi MIME — dan menaruh pemutusan baris di tempat kolom itu berakhir. Pemutusan baris itu bukan bagian dari data. Ia ada agar baris panjang dapat bertahan dalam pengiriman, dan setiap dekoder yang membaca blob semacam itu diharapkan mengabaikannya.
Halaman ini tidak mengabaikannya dengan sendirinya, dan alasannya adalah aturan yang digunakannya di semua tempat lain. Spasi kosong adalah tanda tunggal terkuat bahwa sebuah string adalah prosa, bukan data, dan itulah tes yang mencegah The quick brown fox jumps over the lazy dog. dibaca sebagai apa pun. Blob yang terbungkus tampak persis seperti prosa bagi tes itu, sehingga halaman tidak menemukan apa-apa di dalamnya — lalu melakukan separuh pekerjaan yang jujur: ia menghitung apa yang akan ditemukan jika spasi kosong dibuang, mendaftarkannya di pemilih manual yang ditandai whitespace dibuang dulu, lalu berhenti di situ. Ia didaftar dan tidak diterapkan karena membuang spasi kosong mengubah teks, dan halaman ini hanya mengubah teks ketika dapat membuktikan apa perubahannya. Di sini ia dapat membuktikan perubahannya, namun tetap menolak membuatnya untuk pengguna, karena teks dengan pemutusan baris di tengah sebuah nilai dan teks dengan pemutusan baris di antara dua bidang tampak sama dari dalam.
Dua langkah ketika halaman berhenti pada teks yang terbungkus. Beralih ke Langkah demi langkah secara manual, tekan Terapkan lapisan berikutnya sekali (itulah yang memberi halaman rantai untuk ditambahi, dan tidak mengubah apa pun), lalu pilih entri yang bertanda whitespace dibuang dulu dan tekan Terapkan. Baris yang muncul menyebutkan berapa karakter spasi kosong yang dibuang, dan melaporkan ukuran masukannya sebagai teks yang ditempel, sehingga selisih antara dua angka pada baris itu tepat sama dengan spasi kosong yang dibuang.
Alasan yang sama berlaku untuk kasus sebaliknya. Blok uuencode membawa baris begin dan karakter panjang di setiap barisnya, sehingga dapat dikenali apa adanya dan diterapkan sendirian; badan quoted-printable mempertahankan pemutusan baris lunaknya sendiri dan didekode oleh dekodernya sendiri, yang tahu bahwa tanda = tunggal di akhir baris adalah kelanjutan, bukan data. Jika tes bentuk tidak dapat membedakan prosa dari data, halaman menolak dan menunjukkan alternatifnya alih-alih memilih untuk pengguna.
Apa yang akan dijalankan halaman ini, dan apa yang ditolaknya
Tabel di bawah dibangun dari konstanta yang sama yang ditegakkan halaman, sehingga baris dan peringatan di halaman ini tidak akan berselisih. Dua angka yang mengejutkan orang adalah baris Base58 dan Base62: kedua teknik itu dikonversi dengan pembagian panjang yang biayanya tumbuh sebanding dengan kuadrat panjangnya, sehingga halaman ini hanya menjalankannya pada string pendek dan menyebutkannya di langkah itu, alih-alih tampak membeku.
Perkiraan ini sengaja bersifat pesimistis. Berasal dari harness pengukuran waktu, bukan dari perangkat ini, dan browser desktop biasanya beberapa kali lebih cepat daripada angka yang ditampilkan.
🔷 Alat Enkode
Membuka teks yang telah dienkode lebih dari sekali, satu lapisan per waktu.