Decodor de lanțuri de codificare — fiecare strat numit, fiecare presupunere etichetată
Decodor în lanț de codificări
Textul care a trecut prin mai mulți codificatori este cazul normal, nu cel exotic: un corp JSON într-un token Base64, un URL dintr-o linie de jurnal, o valoare de formular codificată procentual și apoi în Base64, pentru a putea circula într-un antet. Această pagină desfășoară aceste straturi unul câte unul, numește tehnica folosită la fiecare pas, afișează cât de sigură este și de ce și enumeră tehnicile respinse la acel pas, ca orice rezultat să poată fi contestat.
Se oprește când textul încetează să mai arate codificat, când atinge limita de pași sau când pasul următor ar aduce înapoi text deja văzut. Nimic nu se ghicește pe ascuns: o tehnică al cărei alfabet se suprapune cu cuvintele obișnuite nu se aplică niciodată singură, ci doar se oferă.
Toată prelucrarea are loc local în browser — datele nu se încarcă niciodată pe vreun server.
Aplică un strat singur doar când încrederea este de cel puțin:
Oprire după
Rulează dintr-o dată limita de straturi de mai sus. Același tabel este construit în ambele moduri, așa că se poate trece la pas cu pas în orice moment.
Sau se alege manual o tehnică:
Această listă este ceea ce vede pagina în text chiar acum. Cifrurile de rotație sunt mereu incluse, pentru că nu pot fi detectate deloc; la fel și orice devine recognoscibil doar după eliminarea spațiilor albe dintr-un text împărțit, ceea ce este marcat ca atare și nu se aplică niciodată singur.
Text codificat
Această intrare este mai lungă decât îi place paginii să ruleze fără întrebare, iar estimarea de mai sus spune că poate dura . Se apasă din nou Desfășoară întregul lanț pentru a continua oricum, sau se scurtează mai întâi textul.
Ce vede pagina în text chiar acum
(se scrie sau se lipește ceva mai întâi)
(lanțul va apărea aici)
Straturi, în ordinea în care au fost scoase
#
Tehnică
Încredere
Intrare → rezultat
Dimensiune
De ce aceasta
Pe strat
Copierea preia textul așa cum era după acel strat. Revenirea elimină acel strat și pe toate cele de deasupra, ceea ce permite anularea mai multor pași deodată.
Rezultat după0strat(uri)(încă nimic)
Ce este un lanț de codificare și de ce are nevoie de propriul decodor?
Un strat este un codificator aplicat unui text. Un lanț este două sau mai multe aplicate unul după altul. Aproape orice exemplu de zi cu zi arată așa: cineva trebuie să pună o bucată de binar — o imagine, un token semnat — într-un loc care poartă doar text, deci o codifică în Base64. Rezultatul Base64 trebuie apoi să circule într-un URL, așa că este escapat procentual. Întregul URL ajunge apoi într-o linie de jurnal sau într-un fișier de configurare, așa că și barele inverse sau ghilimelele sunt escapate. Ceea ce se vede când apare problema este stratul cel mai exterior, iar el este de neînțeles din motivul simplu că straturile interioare sunt încă prezente.
Decodoarele cu un singur scop nu ajută în acest caz. Un decodor Base64 căruia i se dă JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC va produce un răspuns perfect corect, dar tot de neînțeles, pentru că escapările procentuale și referințele de caractere sunt încă deasupra textului dorit. Ce este necesar de fapt este ceva care decide, la fiecare pas, ce codificator să se îndepărteze — iar această pagină este acea decizie făcută vizibilă.
Codificarea nu este criptare, iar această pagină nu sparge nimic. Fiecare tehnică de pe această pagină este o modalitate publică și reversibilă de a scrie aceeași informație. Base64 nu are cheie. Escapările procentuale nu au cheie. Dacă stratul cel mai interior este criptat, pagina va decoda straturile exterioare și va returna text cifrat, pe care îl va spune clar, în loc să pretindă că este un rezultat. Nu există nimic de executat aici și nimic de ascuns.
Exemplele lucrate ale acestei pagini
Fiecare rând de mai jos este o intrare reală din fișierul de date al acestei pagini, iar coloana din mijloc este ceea ce găsește în ea decodorul propriu al paginii. Ultima coloană este textul rămas când se oprește.
Ce este intrarea
Straturi găsite
Intrarea, citată așa cum a sosit
Rămas când se oprește
Aceste rânduri sunt redate de pagină din propria listă de cazuri și sunt rerulate la fiecare vizită, așa că nu se pot abate de la ce face codul. Testul propriu de mai jos verifică fiecare dintre ele.
Cum decide pagina ce strat să îndepărteze
Se judecă forma, nu sensul. Fiecare tehnică are o semnătură — o escapare procentuală, o serie pară de cifre hexazecimale, un alfabet și o lungime care se potrivesc cu Base64. Pagina listează fiecare tehnică a cărei semnătură corespunde textului, cu o încredere între 0 și 1.
Decodează, apoi verifică dacă rezultatul este text. O tehnică merită aplicată doar dacă produce ceva lizibil. Fiecare candidat este chiar rulat, iar rezultatul său este evaluat după cât de mult din el sunt caractere tipăribile.
Se aplică doar ce trece pragul, în ordinea încrederii. Candidatul cu cea mai mare încredere peste pragul ales se aplică, iar procesul se repetă asupra rezultatului. Sub prag, tehnicile sunt listate, dar nu se aplică.
O regulă pe care această pagină o adaugă peste celelalte. Chiar și când o tehnică trece pragul, pagina nu o aplică singură decât dacă rezultatul este într-adevăr text lizibil — caracterele de înlocuire și caracterele de control contează împotriva lui. Fără această regulă, cuvântul obișnuit cafe ar fi decodat valid ca trei octeți care sunt tipăribili doar în Latin-1, iar getUserName ar fi decodat valid ca opt octeți de zgomot. Detectorul are dreptate că aceste șiruri se potrivesc cu alfabetul; pagina decide că a se potrivi cu alfabetul nu este suficient. Totuși, ele pot fi aplicate manual, iar lista candidatelor arată că au fost refuzate și motivul.
Oprirea, deliberat. Când nicio tehnică nu trece pragul, când textul nu se mai schimbă, când se atinge limita de pași sau când pasul următor ar aduce înapoi text care a apărut deja în acest lanț. Ultimul caz contează: ROT13 este inversul propriu, așa că un lanț care ar avea voie să facă acel pas de două ori nu s-ar termina niciodată.
Un text împărțit pe rânduri se oferă, nu se aplică. Dacă textul este tăiat pe mai multe rânduri, detectorul vede spații albe, citește proză obișnuită și nu găsește nimic. Așadar pagina elimină spațiile albe dintr-o copie a textului, întreabă din nou detectorul și oferă ce găsește ca pas de ales manual. Eliminarea spațiilor albe din text înseamnă rescrierea textului, iar această pagină nu rescrie nimic ce nu i s-a cerut să rescrie.
Ce nu face această pagină
Decodează, și atât. Textul lipit nu este niciodată executat: fără eval, fără new Function, fără injectare de scripturi, fără deschiderea vreunui document. Nu este niciodată trimis nicăieri: fără încărcare, fără cerere, fără analiză. În afara spațiului de anunț din subsolul paginii și al rândului de butoane de distribuire (acestea sunt singurele două widgeturi terțe încărcate de pagină), niciun font sau script nu este preluat de la altă gazdă. Rezultatul decodat este scris în pagină ca text, astfel că o etichetă HTML care iese dintr-un strat este afișată ca etichetă, nu transformată în una. Toate acestea se pot verifica: se apasă Autotestare, iar autotestul verifică sursa paginii pentru orice construcție de acest fel și eșuează dacă găsește una.
Ce poate recunoaște și ce nu
Tehnică
Cât de sigură este, singură
Capcana
Textul citat pe această pagină este scris pentru acest site. Alfabetele Base64, Base32, Base58, Base91 și quoted-printable, precum și formatul de bloc uuencode sunt cele publicate; decodarea urmează aceste definiții, nu particularitățile unui anumit instrument. Vectorii de referință pentru alfabete se află pe paginile surori, care conțin vectorii de test RFC 4648.
Text care vine împărțit pe mai multe rânduri
Un bloc care a trecut printr-un mesaj de e-mail, printr-un fișier PEM, printr-un token dintr-un antet sau printr-un hash copiat dintr-un terminal este de obicei împărțit pe rânduri: codificatorul l-a rupt la o coloană fixă — 76 de caractere este convenția MIME — și a pus o întrerupere de rând unde s-a încheiat coloana. Aceste întreruperi de rând nu fac parte din date. Există pentru ca o linie lungă să supraviețuiască transportului, iar fiecare decodor care citește un astfel de bloc este așteptat să le ignore.
Pagina nu le ignoră de una singură, iar motivul este regula pe care o folosește peste tot. Spațiul alb este cel mai puternic semn unic că un șir este proză, nu date, iar testul acesta este cel care împiedică The quick brown fox jumps over the lazy dog. să fie citit ca altceva. Un bloc împărțit pe rânduri arată exact ca proza pentru acest test, deci pagina nu găsește nimic în el — și apoi face jumătatea onestă a muncii: stabilește ce ar găsi dacă spațiile albe ar fi eliminate, listează asta în selectorul manual marcat mai întâi se elimină spațiile albe și se oprește acolo. Este listat, nu aplicat, pentru că eliminarea spațiilor albe modifică textul, iar această pagină modifică textul doar când poate dovedi ce anume schimbă. Aici poate dovedi ce schimbare ar produce, dar tot refuză să o facă pentru persoana care o folosește, pentru că un text cu o întrerupere de rând la mijlocul unei valori și un text cu o întrerupere între două câmpuri arată la fel din interior.
Cei doi pași când pagina se oprește la un text împărțit. Se trece la Pas cu pas, manual, se apasă o dată Se aplică stratul următor (asta îi dă paginii un lanț la care să adauge și nu schimbă nimic), apoi se alege intrarea marcată mai întâi se elimină spațiile albe și se apasă Se aplică. Rândul care iese spune câte caractere de spațiu au fost eliminate și raportează dimensiunea intrării ca textul lipit, astfel că diferența dintre cele două numere din acel rând este exact spațiul eliminat.
Același raționament acoperă și cazurile care merg în sens invers. Un bloc uuencode conține o linie begin și un caracter de lungime pe fiecare rând, deci este recognoscibil așa cum este și se aplică singur; un corp quoted-printable își păstrează propriile întreruperi moi de rând și este decodat de propriul decodor, care știe că un singur = la sfârșitul unui rând este o continuare, nu date. Acolo unde un test de formă nu poate deosebi proza de date, pagina se oprește și arată alternativa, în loc să decidă singură.
Ce rulează această pagină și ce refuză să ruleze
Tabelul de mai jos este construit din aceleași constante pe care le aplică pagina, astfel că un rând și un avertisment de pe această pagină nu se pot contrazice. Cele două cifre care surprind oamenii sunt rândurile Base58 și Base62: aceste două tehnici sunt convertite prin împărțire lungă al cărei cost crește cu pătratul lungimii, așa că pagina le rulează doar pe un șir scurt și o spune în pas, în loc să pară că se blochează.
Estimările sunt intenționat pesimiste. Provin dintr-un test de cronometrare, nu de pe un anumit calculator, iar un browser de desktop este de obicei de câteva ori mai rapid decât cifra afișată.
🔷 Instrumente de codificare
Desfășoară textul care a fost codificat de mai multe ori, un strat pe rând.