Decodificatore di catene di codifica — ogni livello nominato, ogni ipotesi etichettata
Decodificatore di catene di codifica
Il testo passato attraverso più di un codificatore è il caso normale, non quello eccezionale: un corpo JSON dentro un token Base64, un URL dentro una riga di log, un valore di modulo sottoposto a escape percentuale e poi codificato in Base64 per poter viaggiare in un'intestazione. Questa pagina rimuove quei livelli uno alla volta, indica la tecnica usata a ogni passo, stampa quanto è sicura e perché, ed elenca le tecniche che ha scartato in quel passo, così lei può non essere d'accordo. Si ferma quando il testo smette di sembrare codificato, quando raggiunge il limite di passi, o quando il passo successivo riporterebbe un testo già visto. Nulla viene indovinato in silenzio: una tecnica il cui alfabeto si sovrappone alle normali parole non viene mai applicata da sola, ma solo proposta. Tutta l'elaborazione avviene localmente nel suo browser — i suoi dati non vengono mai caricati su alcun server.
Applica un livello da solo solo quando la confidenza è almeno:
Fermati dopo
Esegue in un colpo solo il limite di livelli indicato sopra. Si costruisce comunque la stessa tabella, quindi può passare alla modalità passo per passo in qualsiasi momento.
Oppure scelga una tecnica a mano:
Questo elenco è ciò che la pagina vede nel testo in questo momento. Le cifrature a rotazione sono sempre presenti, perché non possono essere rilevate affatto; lo è anche qualsiasi cosa che diventi riconoscibile solo dopo aver tolto gli spazi da un testo andato a capo, che viene contrassegnata come tale e non viene mai applicata da sola.
Testo codificato
Questo input è più lungo di quanto questa pagina preferisca eseguire senza chiedere, e la stima qui sopra indica che potrebbe richiedere . Prema di nuovo Rimuovi l'intera catena per procedere comunque, oppure accorci prima il testo.
Che cosa vede la pagina nel testo in questo momento
(scriva o incolli prima qualcosa)
(la catena comparirà qui)
Livelli, nell'ordine in cui sono stati rimossi
#
Tecnica
Confidenza
Input → risultato
Dimensione
Perché proprio questa
Per livello
Copia prende il testo così come era dopo quel livello. Ripristina elimina quel livello e tutti quelli sopra, che è il modo di annullare più di un passo alla volta.
Risultato dopo0livello/i(ancora nulla)
Che cos'è una catena di codifica, e perché serve un proprio decodificatore?
Un livello è un codificatore applicato a un testo. Una catena è due o più di essi applicati uno dopo l'altro. Quasi ogni esempio quotidiano è fatto così: qualcuno deve mettere un pezzo di dati binari — un'immagine, un token firmato — in un posto che trasporta solo testo, quindi lo codifica in Base64. Quel risultato in Base64 deve poi viaggiare in un URL, quindi viene sottoposto a escape percentuale. Quell'intero URL finisce poi in una riga di log o in un file di configurazione, quindi anche le barre rovesciate o le virgolette vengono sottoposte a escape. Quello che vede quando incontra il problema è il livello più esterno, ed è illeggibile per la semplice ragione che i livelli interni sono ancora presenti.
I decodificatori a scopo singolo non aiutano in questo caso. Un decodificatore Base64 applicato a JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC produrrà una risposta perfettamente corretta che resta illeggibile, perché gli escape percentuali e i riferimenti ai caratteri sono ancora sopra il testo che voleva. Ciò di cui ha davvero bisogno è qualcosa che decida, a ogni passo, quale codificatore rimuovere — e questa pagina rende visibile quella decisione.
La codifica non è cifratura, e questa pagina non rompe nulla. Ogni tecnica di questa pagina è un modo pubblico e reversibile di scrivere la stessa informazione. Base64 non ha chiave. L'escape percentuale non ha chiave. Se il livello più interno è cifrato, questa pagina decodificherà i livelli esterni e le consegnerà il testo cifrato, che dirà chiaramente invece di fingere che sia un risultato. Non c'è nulla da eseguire e nulla da nascondere.
Gli esempi svolti di questa pagina
Ogni riga qui sotto è un input reale del file di dati di questa pagina, e la colonna centrale è ciò che il decodificatore della pagina trova al suo interno. L'ultima colonna è il testo che resta quando si ferma.
Che cos'è l'input
Livelli trovati
Input, tra virgolette così come arriva
Resta quando si ferma
Queste righe sono generate dalla pagina a partire dal suo elenco di casi e rieseguite ad ogni visita, quindi non possono discostarsi da ciò che fa il codice. L'autotest qui sotto controlla ciascuna di esse.
Come la pagina decide quale livello rimuovere
Guardi la forma, non il significato. Ogni tecnica ha una firma — un escape percentuale, una sequenza pari di cifre esadecimali, un alfabeto e una lunghezza compatibili con Base64. La pagina elenca ogni tecnica la cui firma corrisponde al testo, con una confidenza tra 0 e 1.
Decodifichi, poi verifichi se il risultato è testo. Una tecnica vale la pena solo se produce qualcosa di leggibile. Ogni candidato viene effettivamente eseguito, e il suo output viene valutato in base a quanti caratteri stampabili contiene.
Applichi solo ciò che supera la soglia, in ordine di confidenza. Si applica il candidato con la confidenza più alta sopra la soglia impostata, e il processo si ripete sul risultato. Sotto la soglia, le tecniche vengono elencate ma non applicate.
Una regola che questa pagina aggiunge. Anche quando una tecnica supera la soglia, questa pagina non la applica da sola a meno che il risultato non sia davvero testo leggibile — i caratteri di sostituzione e i caratteri di controllo pesano contro di essa. Senza questa regola, la normale parola cafe verrebbe decodificata come tre byte validi, stampabili solo in Latin-1, e getUserName come otto byte di rumore. Il rilevatore ha ragione nel dire che quelle stringhe rientrano nell'alfabeto; questa pagina decide che rientrare nell'alfabeto non basta. Può comunque applicarle a mano, e l'elenco dei candidati le dice che le ha rifiutate e perché.
Si fermi, deliberatamente. Quando nessuna tecnica supera la soglia, quando il testo smette di cambiare, quando viene raggiunto il limite di passi, o quando il passo successivo riporterebbe testo già comparso in questa catena. Quest'ultimo punto conta: ROT13 è l'inverso di sé stesso, quindi una catena che potesse applicarlo due volte non finirebbe mai.
Un testo andato a capo viene proposto, mai applicato. Se il testo è spezzato su più righe, il rilevatore vede spazi, legge una normale prosa e non trova nulla. Quindi la pagina toglie gli spazi da una copia del testo, chiede di nuovo al rilevatore e propone ciò che trova come un passo da scegliere a mano. Togliere gli spazi dal suo testo è una riscrittura del testo, e questa pagina non riscrive nulla che lei non abbia chiesto di riscrivere.
Che cosa questa pagina non farà
Decodifica, e basta. Il testo che incolla non viene mai eseguito: nessun eval, nessun new Function, nessuna iniezione di script, nessuna apertura di documenti. Non viene mai inviato da nessuna parte: nessun caricamento, nessuna richiesta, nessuna analisi. A parte lo slot pubblicitario in fondo alla pagina e la riga dei pulsanti di condivisione (gli unici due widget di terze parti caricati da questa pagina), nessun font o script viene recuperato da un altro host. L'output decodificato viene scritto nella pagina come testo, quindi un tag HTML che esce da un livello viene mostrato come tag e non trasformato in tale. Può verificare tutto questo: prema Autotest e controlla il sorgente di questa pagina alla ricerca di tali costrutti, fallendo se ne trova uno.
Che cosa riconosce, e che cosa non riconosce
Tecnica
Quanto sicura, da sola
Il tranello
Il testo citato in questa pagina è scritto per questo sito. Gli alfabeti Base64, Base32, Base58, Base91 e quoted-printable e il formato a blocchi uuencode sono quelli pubblicati; la decodifica segue tali definizioni e non le particolarità di uno strumento specifico. I vettori di riferimento per gli alfabeti si trovano nelle pagine sorelle, che riportano i vettori di test della RFC 4648.
Testo arrivato andato a capo su più righe
Un blocco che è passato attraverso un messaggio di posta, un file PEM, un token in un'intestazione o un hash copiato da un terminale è di solito andato a capo: il codificatore lo ha spezzato a una colonna fissa — 76 caratteri è la convenzione MIME — e ha inserito un a capo dove finiva la colonna. Quegli a capo non fanno parte dei dati. Esistono perché una riga lunga sopravviva al trasporto, e ogni decodificatore che legge un blocco del genere deve ignorarli.
Questa pagina da sola non li ignora, e il motivo è la regola che usa ovunque. Gli spazi sono il segnale singolo più forte che una stringa sia prosa e non dati, ed è il test che impedisce a The quick brown fox jumps over the lazy dog. di essere letto come qualcosa. Un blocco andato a capo sembra esattamente prosa a quel test, quindi la pagina non trova nulla al suo interno — e poi fa la metà onesta del lavoro: calcola ciò che troverebbe se gli spazi fossero tolti, lo elenca nel selettore manuale contrassegnato come spazi via prima, e si ferma lì. Viene elencato invece di essere applicato perché togliere gli spazi cambia il suo testo, e questa pagina modifica il testo solo quando può dimostrare quale sia la modifica. Qui può dimostrarlo, ma non la fa per lei, perché un testo con un a capo a metà di un valore e un testo con un a capo tra due campi appaiono uguali dall'interno.
I due passi quando la pagina si ferma su un testo andato a capo. Passi a Procedi a mano, passo per passo, prema Applica il livello successivo una volta (ciò dà alla pagina una catena a cui aggiungere, e non cambia nulla), poi scelga la voce contrassegnata come spazi via prima e prema Applica. La riga che ne esce indica quanti caratteri di spazio sono stati rimossi, e riporta la dimensione dell'input come il testo che ha incollato, quindi la differenza tra i due conteggi di quella riga è esattamente lo spazio che è stato tolto.
Lo stesso ragionamento vale per i casi che vanno nell'altra direzione. Un blocco uuencode porta una riga begin e un carattere di lunghezza su ogni riga, quindi è riconoscibile così com'è e viene applicato da solo; un corpo quoted-printable conserva i propri a capo morbidi e viene decodificato dal proprio decodificatore, che sa che un singolo = finale alla fine di una riga è una continuazione e non un dato. Quando un test di forma non riesce a distinguere la prosa dai dati, la pagina si astiene e le mostra l'alternativa invece di scegliere per lei.
Che cosa questa pagina eseguirà, e che cosa rifiuta di eseguire
La tabella qui sotto è costruita dalle stesse costanti che la pagina applica, quindi una riga e un avviso di questa pagina non possono contraddirsi. Le due cifre che sorprendono le persone sono quelle delle righe Base58 e Base62: quelle due tecniche vengono convertite con una divisione lunga il cui costo cresce con il quadrato della lunghezza, quindi questa pagina le esegue solo su una stringa corta e lo dichiara nel passo invece di sembrare bloccata.
Le stime sono volutamente pessimistiche. Derivano da un banco di misura temporale e non dalla sua macchina, e un browser da desktop è di solito diverse volte più veloce della cifra mostrata.
🔷 Strumenti per codifiche
Rimuove il testo codificato più di una volta, un livello alla volta.