Kódolási lánc dekódoló

Az olyan szöveg, amely több kódolón is átment, a normális eset, nem az egzotikus: JSON-törzs Base64-tokenben, URL egy naplósorban, űrlapérték, amelyet először százalékos kódolással, majd Base64-gyel kódoltak, hogy átférjen egy fejlécen. Ez az oldal ezeket a rétegeket egyenként bontja le, minden lépésnél megnevezi az alkalmazott technikát, kiírja, mennyire biztos benne és miért, és felsorolja azokat a technikákat, amelyeket ott elutasított, hogy vitatkozni lehessen vele. Akkor áll meg, ha a szöveg már nem kódoltnak látszik, ha eléri a lépéshatárt, vagy ha a következő lépés olyan szöveget hozna vissza, amelyet már látott. Semmi nem találgatódik csendben: a hétköznapi szavakkal átfedő ábécéjű technikát soha nem alkalmazza magában, csak felajánlja.
Minden feldolgozás helyben, a böngészőben történik — az adatok semmilyen szerverre nem kerülnek feltöltésre.

Új ez? A kódolási láncok egyszerű nyelven magyarázva — mi az a réteg, miért nem titkosítás a kódolás, és miért számít a lépések sorrendje.
Réteg önálló levétele csak legalább ekkora bizonyosság esetén:
Megállás ezután
A fenti rétegkorlátot egy lépésben futtatja le. Ugyanaz a táblázat készül mindkét módon, így bármelyik ponton át lehet váltani lépésenkénti módra.
Vagy technika kézi kiválasztása:
Ez a lista az, amit az oldal most lát a szövegben. A forgatóciklusok mindig benne vannak, mert egyáltalán nem detektálhatók; ugyanígy benne van minden olyan, amely csak akkor válik felismerhetővé, ha a tördelt szövegből eltávolítják a szóközöket, ezek jelölve vannak, és soha nem alkalmazódnak önállóan.
Ez a bemenet hosszabb, mint amennyit az oldal kérés nélkül szeretne futtatni, és a fenti becslés szerint eltarthat . Az Az egész lánc visszafejtése gombbal lehet mégis folytatni, vagy előbb a szöveg rövidítése szükséges.
(először szöveg írása vagy beillesztése szükséges)
(a lánc itt fog megjelenni)
Mi az a kódolási lánc, és miért kell neki saját dekódoló?

A réteg egyetlen kódoló egy szövegen alkalmazva. A lánc két vagy több ilyen, egymás után alkalmazva. Szinte minden hétköznapi példa így néz ki: valakinek egy bináris darabot — képet, aláírt tokent — olyan helyre kell tennie, amely csak szöveget hordoz, ezért Base64-re kódolja. Ezt a Base64-eredményt URL-ben kell továbbítani, ezért százalékos escape-elik. Ezt az egész URL-t aztán naplósorba vagy konfigurációs fájlba illesztik, így a perjelek vagy az idézőjelek is escape-elődnek. Amit a probléma pillanatában lát, az a legkülső réteg, és azért olvashatatlan, mert a belső rétegek még rajta vannak.

Az egyrétegű dekóderek ebben nem segítenek. Egy Base64-dekóder, amelynek JTI2bHQlM0JiJTI2Z3QlM0JoaSUyNmx0JTNCJTJGYiUyNmd0JTNC adják, tökéletesen helyes választ ad, amely mégis olvashatatlan, mert a kívánt szöveg fölött még ott vannak a százalékos escape-ek és a karakterhivatkozások. Valójában olyasmi kell, amely minden lépésnél eldönti, melyik kódolót vegye le — és ez az oldal ezt a döntést láthatóvá teszi.

A kódolás nem titkosítás, és ez az oldal semmit nem tör fel. Minden technika ezen az oldalon ugyanannak az információnak nyilvános, visszafordítható leírási módja. A Base64-nek nincs kulcsa. A százalékos escape-elésnek sincs. Ha a legbelső réteg titkosított, az oldal a külső rétegeket dekódolja, és titkosított szöveget ad vissza, amelyet kerek perec kimond, ahelyett hogy eredménynek tüntetné fel. Nincs itt futtatni való és nincs elrejtve semmi.
Az oldal kidolgozott példái

A lenti minden sor az oldal adatfájljának valós bemenete, a középső oszlop pedig az, amit az oldal saját visszafejtője talál benne. Az utolsó oszlop az a szöveg, amely megáll után marad.

Mi a bemenet Talált rétegek Bemenet, az érkezésének megfelelően idézve Megállásnál maradt

Ezek a sorok az oldal saját esetlistájából állnak elő, és minden látogatáskor újra lefutnak, így nem térhetnek el attól, amit a kód tényleg csinál. Az alábbi önellenőrzés minden sort ellenőriz.

Hogyan dönti el az oldal, melyik réteg eltávolítandó
  1. Az alak vizsgálata, nem a jelentés. Minden technikának van aláírása — egy százalékos escape, egy páros hexa-számjegysor, egy ábécé és hossz, amely illeszkedik a Base64-re. Az oldal felsorolja az összes olyan technikát, amelynek aláírása illeszkedik a szövegre, 0 és 1 közötti bizonyossággal.
  2. Dekódolás, majd annak ellenőrzése, hogy az eredmény szöveg-e. Egy technika csak akkor ér valamit, ha olvasható dolgot állít elő. Minden jelölt ténylegesen lefut, és kimenete aszerint kap pontszámot, hány nyomtatható karakterből áll.
  3. Csak az alkalmazza, ami átlépi a küszöböt, bizonyosság szerinti sorrendben. A küszöb feletti legbizonyosabb jelölt kerül alkalmazásra, és a folyamat az eredményen ismétlődik. A küszöb alatt a technikák fel vannak sorolva, de nem kerülnek alkalmazásra.
  4. Egy szabály, amelyet ez az oldal még hozzáad. Még ha egy technika átlépi is a küszöböt, ez az oldal nem alkalmazza magában, hacsak az eredmény nem valóban olvasható szöveg — a pótkarakterek és a vezérlőkarakterek ellene szólnak. E szabály nélkül a cafe hétköznapi szó érvényesen dekódolódna három bájtként, amelyek csak Latin-1-ben nyomtathatók, a getUserName pedig nyolc bájt zajként. A detektor helyesen állapítja meg, hogy ezek a sztringek illeszkednek az ábécére; ez az oldal viszont úgy dönt, hogy az ábécére illeszkedés nem elég. Kézzel továbbra is alkalmazhatók, a jelöltlista pedig megmondja, hogy elutasította, és miért.
  5. Szándékosan megáll. Ha egyetlen technika sem éri el a küszöböt, ha a szöveg már nem változik, ha eléri a lépéshatárt, vagy ha a következő lépés olyan szöveget hozna vissza, amely már megjelent ebben a láncban. Ez utóbbi a lényeges: a ROT13 a saját inverze, ezért egy lánc, amely kétszer léphetne ezen a lépésen, soha nem érne véget.
  6. A tördelt szöveg felajánlódik, de nem alkalmazódik. Ha a szöveg több soron át van vágva, a detektor szóközt lát, hétköznapi szövegnek olvassa, és nem talál semmit. Ezért az oldal eltávolítja a szóközöket a szöveg egy másolatából, újra megkérdezi a detektort, és amit talál, lépésként ajánlja fel, kézzel választható módon. A szöveg szóközeinek eltávolítása a szöveg átírása, és ez az oldal nem ír át semmit, amit nem kértek tőle.
Amit ez az oldal nem tesz meg
Csak dekódol, mást nem. A beillesztett szöveget soha nem hajtja végre: nincs eval, nincs new Function, nincs szkriptbeillesztés, nincs dokumentummegnyitás. Soha nem küldi el sehová: nincs feltöltés, nincs kérés, nincs analitika. Az oldal alján lévő hirdetési hely és a megosztógombok sora kivételével (ez a két harmadik féltől származó elem, amelyet az oldal betölt) semmilyen betűkészlet vagy szkript nem töltődik be másik gazdagépről. A dekódolt kimenet szövegként íródik az oldalba, így egy réteg által kibontott HTML-címke címkeként jelenik meg, és nem válik azzá. Mindez ellenőrizhető: az Önteszt gombbal az oldal saját forrását vizsgálja ilyen konstrukciókra, és hibát jelez, ha talál egyet.
Mit tud felismerni, és mit nem
Technika Önmagában mennyire biztos A fogás

Az oldalon idézett szöveg ehhez az oldalhoz készült. A Base64, Base32, Base58, Base91 és quoted-printable ábécék, valamint az uuencode blokkformátum a közzétett szabványok; a dekódolás ezeket a definíciókat követi, nem valamely eszköz sajátosságait. Az ábécék referenciavektorai a testvéroldalakon találhatók, amelyek az RFC 4648 tesztvektorait tartalmazzák.

Több soron át tördelt szöveg

Az e-mail üzenetből, PEM-fájlból, fejlécben lévő tokenből vagy terminálból kimásolt hash származó blob általában tördelt: a kódoló fix oszlopnál törte meg — a MIME-konvenció szerint 76 karakternél — és sortörést tett oda, ahol az oszlop véget ért. Ezek a sortörések nem az adat részei. Azért vannak, hogy egy hosszú sor átvészelje a szállítást, és minden olyan dekódolónak, amely ilyen blobot olvas, figyelmen kívül kell hagynia őket.

Ez az oldal ezeket magában nem hagyja figyelmen kívül, és az ok ugyanaz a szabály, amelyet mindenhol máshol használ. A szóköz a legerősebb egyedi jel arra, hogy egy sztring szöveg, nem adat, és ez a teszt tartja távol a The quick brown fox jumps over the lazy dog. mondatot attól, hogy bármiként is értelmezzék. Egy tördelt blob ezen a teszten pontosan úgy néz ki, mint a szöveg, ezért az oldal nem talál benne semmit — majd elvégzi a munka becsületes felét: kiszámítja, mit találna, ha a szóközöket eltávolítanák, ezt felsorolja a kézi választóban előbb a szóköz eltávolítása megjelöléssel, és ott megáll. Azért van felsorolva és nem alkalmazva, mert a szóköz eltávolítása megváltoztatja a szöveget, és ez az oldal csak akkor változtat szövegen, ha be tudja bizonyítani, mi a változtatás. Itt be tudja bizonyítani, mégsem hajtja végre helyette, mert egy érték közepén lévő sortörés és két mező közötti sortörés belülről nézve azonosnak látszik.

A két lépés, ha az oldal egy tördelt szövegnél megáll. Át kell váltani a Lépésenkénti kézi végrehajtás módra; az Alkalmazás a következő rétegre gombot egyszer meg kell nyomni (ettől lesz az oldalnak lánca, amelyhez hozzá lehet adni, és ez nem változtat semmit), majd az előbb a szóköz eltávolítása jelölésű bejegyzés választandó ki, és az Alkalmazás gombbal indítható. A levett sor azt mutatja, hány szóközkaraktert távolítottak el, és bemeneti méretként a beillesztett szöveget adja meg, így a sorban szereplő két szám különbsége pontosan az eltávolított szóköz.

Ugyanez az érvelés a fordított esetekre is vonatkozik. Az uuencode-blokk minden sorában van begin sor és hosszkarakter, így már önmagában felismerhető, és önállóan alkalmazódik; a quoted-printable törzs saját lágy sortöréseit megtartja, és a saját dekódolója dekódolja, amely tudja, hogy a sor végi egyetlen = folytatás, nem adat. Ahol az alakvizsgálat nem tudja megkülönböztetni a szöveget az adattól, az oldal nem dönt, hanem megmutatja az alternatívát.

Mit futtat ez az oldal, és mit nem hajlandó

Az alábbi táblázat ugyanazokból a konstansokból épül, amelyeket az oldal érvényesít, így az oldal egy sora és figyelmeztetése nem mondhat ellent egymásnak. Két szám lepi meg az embereket: a Base58 és a Base62 sor: ezeket a technikákat hosszú osztással alakítják át, amelynek költsége a hossz négyzetével nő, ezért ez az oldal csak rövid sztringen futtatja őket, és ezt kimondja a lépésben, ahelyett hogy úgy tűnne, mintha lefagyott volna.

A becslések szándékosan óvatosak. Időzítő-mérésből származnak, nem a használt gépből, és az asztali böngésző általában többször gyorsabb a megjelenített értéknél.