Dekodér reťazca kódovaní

Text, ktorý prešiel cez viac ako jeden kodér, je bežný prípad, nie exotický: telo JSON vnútri tokenu Base64, URL v riadku logu, hodnota formulára, ktorá bola najprv percentuálne escapovaná a potom zakódovaná Base64, aby mohla cestovať v hlavičke. Táto stránka rozmotáva tieto vrstvy po jednej, pri každom kroku pomenuje použitú techniku, uvedie, ako si je istá a prečo, a vypíše techniky, ktoré odmietla v danom kroku, aby s ňou bolo možné nesúhlasiť. Zastaví sa, keď text prestane vyzerať zakódovaný, keď dosiahne limit krokov alebo keď by ďalší krok vrátil text, ktorý už bol videný. Nič sa tu potichu neodhaduje: technika, ktorej abeceda sa prekrýva s bežnými slovami, sa nikdy neaplikuje sama, iba sa ponúka.
Všetko spracovanie prebieha lokálne v prehliadači — dáta sa nikdy nenahrávajú na žiadny server.

Je to nová téma? Reťazce kódovania vysvetlené prostým jazykom — čo je vrstva, prečo kódovanie nie je šifrovanie a prečo na poradí krokov záleží.
Aplikovať vrstvu samostatne len pri istote aspoň:
Zastaviť po
Spustí limit vrstiev vyššie naraz. Tabuľka sa zostaví rovnako v oboch prípadoch, takže sa dá kedykoľvek prepnúť na krokovanie.
Alebo sa technika vyberie ručne:
Tento zoznam je to, čo stránka vidí v texte práve teraz. Rotačné šifry sú v ňom vždy, pretože sa vôbec nedajú zistiť; rovnako aj čokoľvek, čo sa stane rozpoznateľným, až keď sa z zalomeného textu odstránia biele znaky, čo je označené ako také a nikdy sa to neaplikuje samo.
Tento vstup je dlhší, než táto stránka rada spúšťa bez opýtania, a odhad vyššie hovorí, že to môže trvať . Na pokračovanie napriek tomu sa znova klikne na Rozmotať celý reťazec, alebo sa text najprv skráti.
(najprv sa vloží alebo napíše niečo)
(reťazec sa zobrazí tu)
Čo je reťazec kódovania a prečo potrebuje vlastný dekodér?

Vrstva je jeden kodér aplikovaný na text. Reťazec sú dve alebo viac vrstiev aplikovaných jedna za druhou. Takmer každý bežný príklad vyzerá takto: niekto potrebuje vložiť kúsok binárnych dát — obrázok, podpísaný token — na miesto, ktoré prenáša iba text, takže ho zakóduje do Base64. Výsledok Base64 potom musí cestovať v URL, takže sa percentuálne escapuje. Celá URL sa potom vloží do riadku logu alebo konfiguračného súboru, takže sa escapujú aj spätné lomky alebo úvodzovky. To, čo sa zobrazí pri probléme,, je najvonkajšia vrstva, a je nečitateľná z jednoduchého dôvodu: vnútorné vrstvy sú stále zapnuté.

Dekodéry s jedným účelom v tom nepomôžu. Dekodér Base64, ktorému sa podá JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC, vráti úplne správny výsledok, ktorý je stále nečitateľný, pretože percentuálne úniky a znakové referencie sú stále navrchu textu, ktorý sa chcel. Potrebné je niečo, čo na každom kroku rozhodne, ktorý kodér odstrániť — a táto stránka je toto rozhodovanie zobrazené.

Kódovanie nie je šifrovanie a táto stránka nič nerozbíja. Každá technika na tejto stránke je verejný, vratný spôsob, ako zapísať tú istú informáciu. Base64 nemá kľúč. Percentuálne escapovanie nemá kľúč. Ak je najvnútornejšia vrstva zašifrovaná, táto stránka dekóduje vonkajšie vrstvy a odovzdá šifrotext, o ktorom jasne povie, že nie je výsledkom, a nebude sa tváriť inak. Tu nie je nič, čo by sa spúšťalo, a nič, čo by sa skrývalo.
Prepracované príklady na tejto stránke

Každý riadok nižšie je skutočný vstup z dátového súboru tejto stránky a stredný stĺpec je to, čo nájde vlastný rozmotávač stránky. Posledný stĺpec je text, ktorý zostane, keď sa zastaví.

Čo je vstup Nájdené vrstvy Vstup, citovaný tak, ako prišiel Zostalo po zastavení

Tieto riadky sa stránka vykresľuje z vlastného zoznamu prípadov a pri každej návšteve sa znova spúšťajú, takže sa nemôžu odchýliť od toho, čo kód robí. Test sebakontroly nižšie skontroluje každý z nich.

Ako stránka rozhodne, ktorú vrstvu odstrániť
  1. Pozerá sa na tvar, nie na význam. Každá technika má podpis — percentuálny únik, párny počet hexadecimálnych číslic, abecedu a dĺžku, ktoré sa hodia na Base64. Stránka uvedie každú techniku, ktorej podpis zodpovedá textu, s istotou medzi 0 a 1.
  2. Dekódovať a potom skontrolovať, či je výsledok text. Technika sa aplikuje len vtedy, keď dá niečo čitateľné. Každý kandidát sa skutočne spustí a jeho výstup sa ohodnotí podľa toho, koľko z neho sú tlačiteľné znaky.
  3. Aplikovať len to, čo prekročí latku, v poradí podľa istoty. Kandidát s najvyššou istotou nad prahom sa aplikuje a proces sa zopakuje na výsledku. Pod prahom sa techniky uvedú, ale neaplikujú sa.
  4. Jedno pravidlo, ktoré táto stránka pridáva. Aj keď technika prekročí prah, táto stránka ju sama neaplikuje, pokiaľ výsledok nie je skutočne čitateľný text — nahrádzacie znaky a riadiace znaky sa počítajú proti nemu. Bez tohto pravidla by bežné slovo cafe bolo platne dekódované ako tri bajty, ktoré sú tlačiteľné iba v Latin-1, a getUserName by bolo platne dekódované ako osem bajtov šumu. Detektor má pravdu, že tieto reťazce zodpovedajú abecede; táto stránka rozhodla, že zodpovedanie abecede nestačí. Dajú sa stále aplikovať ručne a zoznam kandidátov povie, že to odmietla a prečo.
  5. Zastaviť zámerne. Keď žiadna technika neprekročí latku, keď sa text prestane meniť, keď sa dosiahne limit krokov alebo keď by ďalší krok vrátil text, ktorý sa už v tomto reťazci objavil. Posledný bod je dôležitý: ROT13 je sám sebe inverzný, takže reťazec, ktorý by tento krok smel urobiť dvakrát, by sa nikdy neskončil.
  6. Zalomený text sa ponúka, nikdy sa neaplikuje. Ak je text rozrezaný na viacero riadkov, detektor vidí medzery, číta bežnú prózu a nič nenájde. Stránka preto odstráni medzery z kópie textu, detektor sa spýta znova a čokoľvek nájde, ponúkne ako krok na ručný výber. Odstránenie medzier z textu je jeho prepísanie, a táto stránka nič neprepisuje, čo nebolo požadované.
Čo táto stránka nerobí
Iba dekóduje a nič iné. Vložený text sa nikdy nespúšťa: žiadny eval, žiadny new Function, žiadne vkladanie skriptov, žiadne otváranie dokumentu. Nikdy sa neodosiela nikam: žiadne nahrávanie, žiadna požiadavka, žiadna analytika. Okrem reklamného priestoru v pätičke stránky a radu tlačidiel zdieľania (to sú jediné dva widgety tretích strán, ktoré táto stránka načítava) sa žiadne písmo ani skript nesťahuje z iného hostiteľa. Dekódovaný výstup sa zapisuje do stránky ako text, takže HTML značka, ktorá vznikne z vrstvy, sa zobrazí ako značka a nie ako skutočná značka. Overenie je možné: tlačidlo Sebakontrola prehľadá zdrojový kód tejto stránky na akékoľvek takéto konštrukcie a zlyhá, ak nejakú nájde.
Čo dokáže rozpoznať a čo nie
Technika Sama o sebe, aká je istota Úskalie

Text citovaný na tejto stránke je napísaný pre túto stránku. Abecedy Base64, Base32, Base58, Base91 a quoted-printable a formát blokov uuencode sú zverejnené; dekódovanie sa riadi týmito definíciami, nie žiadnymi zvláštnosťami konkrétneho nástroja. Referenčné vektory pre abecedy sú na súvisiacich stránkach, ktoré obsahujú testovacie vektory RFC 4648.

Text zalomený do viacerých riadkov

Blob, ktorý prešiel e-mailovou správou, súborom PEM, tokenom v hlavičke alebo hashom skopírovaným z terminálu, je zvyčajne zalomený: kodér ho rozdelil na pevnom stĺpci — 76 znakov je konvencia MIME — a vložil zalomenie riadka tam, kde stĺpec skončil. Tieto zalomenia riadkov nie sú súčasťou dát. Existujú preto, aby dlhý riadok prežil prenos, a od každého dekodéra, ktorý takýto blob číta, sa očakáva, že ich bude ignorovať.

Táto stránka ich sama neignoruje a dôvod je pravidlo, ktoré používa všade inde. Biele znaky sú najsilnejším jediným znakom, že reťazec je próza a nie dáta, a práve tento test zabraňuje tomu, aby sa The quick brown fox jumps over the lazy dog. čítal ako čokoľvek. Zalomený blob vyzerá pre tento test presne ako próza, takže stránka v ňom nič nenájde — a potom urobí poctivú polovicu práce: zistí, čo by našla, keby sa biele znaky odstránili, uvedie to vo ručnom výbere označenom najprv odstrániť medzery a tam sa zastaví. Je to uvedené a neaplikuje sa, pretože odstránenie bielych znakov mení text, a táto stránka mení text iba vtedy, keď dokáže preukázať, aká je zmena. Tu dokáže preukázať, aká je zmena, a stále ju nevykoná, pretože text so zalomením riadka uprostred hodnoty a text so zalomením medzi dvoma poľami vyzerajú zvnútra rovnako.

Dva kroky, keď sa stránka zastaví na zalomenom texte. Prepne sa na Krok po kroku ručne, raz sa stlačí Použiť ďalšiu vrstvu (to dá stránke reťazec, ku ktorému môže pridávať, a nič nemení), potom sa vyberie položka označená najprv odstrániť medzery a stlačí sa Použiť. Riadok, ktorý sa odlúpne, uvedie, koľko medzerových znakov bolo odstránených, a jeho veľkosť vstupu uvádza ako vložený text, takže rozdiel medzi oboma číslami v tomto riadku je presne medzera, ktorá sa odstránila.

Rovnaká úvaha platí aj pre prípady opačným smerom. Blok uuencode nesie riadok begin a znak dĺžky na každom riadku, takže sa dá rozpoznať aj takto a aplikuje sa sám; telo quoted-printable si zachováva vlastné mäkké zalomenia riadkov a dekóduje sa vlastným dekodérom, ktorý vie, že samostatné koncové = na konci riadka je pokračovanie a nie dáta. Keď test tvaru nedokáže rozlíšiť próza od dát, stránka odmietne a ukáže alternatívu namiesto toho, aby volila za používateľa.

Čo táto stránka spustí a čo odmietne spustiť

Tabuľka nižšie je zostavená z tých istých konštánt, ktoré stránka presadzuje, takže riadok a upozornenie na tejto stránke sa nemôžu rozchádzať. Dva údaje, ktoré ľudí prekvapia, sú riadky Base58 a Base62: tieto dve techniky sa prevádzajú dlhým delením, ktorého náklady rastú s druhou mocninou dĺžky, takže ich táto stránka spúšťa iba na krátkom reťazci a v kroku to uvedie namiesto toho, aby pôsobila, že sa zasekla.

Odhady sú zámerne pesimistické. Pochádzajú z časomerného nástroja, nie z konkrétneho zariadenia, a stolový prehliadač je zvyčajne niekoľkokrát rýchlejší ako zobrazená hodnota.