Začněte cílovým prostředím
Před výběrem nástroje si ujasněte, kam se hodnota dostane. HTML entity pomáhají zapsat znaky, například ampersand, v HTML textu. Procentové kódování připraví hodnotu pro komponentu URL, ve které mezery a vyhrazené znaky potřebují jednoznačný zápis. Base64 vyjádří libovolné bajty omezenou abecedou; hodí se tam, kde textový systém přenáší binární data. Hash SHA-256 je otisk pevné délky pro porovnání dat, nikoli způsob obnovení původního vstupu. Ani jeden z těchto čtyř postupů není šifrování. Mají-li data zůstat tajná, použijte vhodné autentizované šifrování místo maskování pomocí Base64 nebo hashe.
Jeden vstup, čtyři výstupy
Vezměme text A&B. V běžném HTML textu lze ampersand zapsat jako A&B a prohlížeč opět zobrazí A&B. V komponentě URL dostaneme A%26B, protože nezakódovaný ampersand může oddělovat parametry. V UTF-8 odpovídají tři viditelné znaky hexadecimálním bajtům 41 26 42 a standardní Base64 je zapíše jako QSZC. Nástroj SHA-256 naproti tomu vrátí dlouhý hexadecimální otisk; malá změna vstupu obvykle vytvoří výrazně jiný otisk. Výstupy nejsou zaměnitelné: Base64 může obsahovat znaky vyhrazené v URL a z hashe původní text nezrekonstruujete.
- A&B — původní text
- HTML: A&B · URL: A%26B
- Base64: QSZC · SHA-256: hash
Vratnost a bezpečnost
HTML entity, procentové kódování a Base64 jsou vratné, znáte-li kontext a kódování vstupu. Proto nezajišťují utajení: Base64 může bez klíče dekódovat kdokoli. SHA-256 je jednosměrná funkce, ale samotný SHA-256 pro předvídatelné heslo nepředstavuje bezpečné ukládání hesel; k tomu slouží specializované postupy se solí. Samotný hash bez autentizovaného protokolu také nedokazuje, kdo data dodal. Na webu závisí escapování na kontextu: HTML text, atribut, URL a zdrojový kód JavaScriptu mají odlišná pravidla. Řetězec připravený pro jeden kontext může být v jiném nebezpečný.
Praktický postup převodu
Nejprve určete původní text a formát očekávaný příjemcem. Při tvorbě HTML textu zapište potřebné znaky jako entity; ve skutečné aplikaci svěřte práci se značkami ověřenému šablonovacímu systému. Vkládáte-li hodnotu do jednoho parametru URL, zakódujte tuto komponentu právě jednou a teprve poté ji připojte k parametru. Požaduje-li rozhraní Base64, nejprve převeďte text na bajty dohodnutým kódováním, obvykle UTF-8. Při porovnávání dvou posloupností bajtů vypočítejte hash obou stejným algoritmem. Původní bajty si ponechte, budete-li chtít zprávu později znovu zobrazit.
Ověřte zpětný převod
U vratného postupu vyzkoušejte odpovídající dekodér. Pozor na dvojité kódování: po dalším zakódování A%26B vznikne %25 a jedno dekódování odstraní pouze jednu vrstvu. Ověřte, zda příjemce Base64 očekává standardní abecedu, variantu vhodnou pro URL nebo doplňovací znaky. Při hashování rozhodují přesné bajty včetně konců řádků a mezer na konci; vizuálně podobný text může mít jiný otisk. Vložený převodník Base64 níže dovoluje vyzkoušet vratný případ. Pro další cesty použijte odkazy na nástroje HTML, URL a SHA-256 a zvolte výstup podle skutečného cíle. Připravujete-li odkaz, zakódujte pouze hodnotu jednoho parametru, nikoli celou adresu včetně oddělovačů. U HTML se zvlášť zeptejte, zda hodnota patří do textu, nebo atributu; tato místa mají různá pravidla. Zkoušku doplňte vstupem s diakritikou: Base64 nejprve kóduje bajty UTF-8, takže výsledek nelze odvozovat jen z počtu písmen. Vrací-li server jiný výsledek, zkontrolujte dohodnuté kódování znaků a neviditelné znaky na konci vstupu. Při sdílení úryvku ověřte, že zveřejňujete jen data, která mohou být veřejná; kódování je neskryje. Při porovnávání hashů si poznamenejte také název algoritmu a přesný formát vstupu; jinak můžete správně vypočtené otisky mylně považovat za neshodu. Vysvětlete příjemci, zda text zahrnuje koncový znak nového řádku.