Text a kód / Návody

Prečo môže mať na pohľad rovnaký text rôzne hash hodnoty

Hash sumarizuje bajty. Ľudské oči vidia znaky; Unicode povoľuje viac ako jednu bajtovú sekvenciu pre nejaký zjavne identický text.

Jedno viditeľné písmeno, dve sekvencie

Slovo Café môže obsahovať jedno zložené é s kódovým bodom U+00E9 alebo písmeno e nasledované kombinačným dĺžňom U+0301. Mnohé písma oba zápisy zobrazia podobne. Zložené é má v UTF-8 bajty C3 A9, rozložený zápis na konci slova bajty 65 CC 81. SHA-256 počíta súhrn z bajtov, a preto tieto dve podoby dajú odlišné výsledky, hoci čitateľ vidí to isté slovo. Nie je to chyba hashovania; ide o rozdiel medzi vizuálnou a bajtovou rovnosťou. Pri skúmaní rozdielu zachovajte pôvodný zápis.

Normalizovať na základe výslovnej dohody

Unicode NFC skladá vhodné sekvencie do kanonickej formy; NFD ich rozkladá. Ak sa dva systémy dohodnú na normalizácii na NFC pred kódovaním ako UTF-8 a hašovaním, dva pravopisy Café v príklade dosiahnu rovnakú kanonickú postupnosť bajtov. Vstavaný nástroj NFC vám umožňuje testovať rozložený vstup. Na poradí záleží: normalizujte znaky, zakódujte ich do UTF-8 bajtov a potom presné bajty hashujte. Hašovanie najskôr zničí informácie potrebné na zosúladenie ekvivalentných pravopisov. Formulár normalizácie zdokumentujte v zmluve o údajoch, aby každý účastník vykonal rovnakú operáciu.

Ak to vyžaduje dohoda, normalizovať pred kódovaním a hashovaním.
  1. Café: zložené é alebo e s prízvukom
  2. NFC → dohodnutá postupnosť znakov
  3. Bajty UTF-8 → súhrn SHA-256

Nenormalizujte všetko slepo

Normalizácia môže zmeniť presný zdrojový text a formy kompatibility NFKC a NFKD vytvárajú širšie substitúcie ako NFC a NFD. To môže byť užitočné pre index vyhľadávania, ale nevhodné pre právny prepis, digitálny podpis na existujúcom dokumente alebo systém, ktorý sľubuje archiváciu po bajtoch. Zjednotenie veľkosti písmen, orezávanie medzier a zmena koncov čiar sú ďalšie možnosti, nie automatické súčasti NFC. Špecifikácia protokolu môže vyžadovať pôvodné bajty alebo definovať iný postup kanonizácie. Po zistení nesúladu dodržujte toto pravidlo namiesto použitia normalizácie.

Skontrolujte bajty kontrolovaným testom

Vytvorte dva krátke reťazce: jeden so zloženým é a druhý s e plus znak spojenia. Spustite každý cez prehliadač UTF-8 bajtov a na konci si všimnite C3 A9 verzus 65 CC 81. Samostatne hashujte surové reťazce; ich trávenie by sa malo líšiť. Potom na každý použite NFC, znova skontrolujte ich bajty a porovnajte súhrny SHA-256. Dávajte pozor na medzery, nové riadky a skryté znaky v skopírovanom vstupe, čo môže tiež zmeniť súhrn. Test by mal porovnávať identické algoritmy a kódovania; hodnotu SHA-256 nemožno porovnávať priamo s hodnotou SHA-512.

Vyberte si porovnanie, ktoré skutočne potrebujete

Pri kontrole integrity súboru je zvyčajne dôležité hašovanie pôvodných bajtov: každá zmena bajtu by mala byť viditeľná. Pri deduplikácii mien zadaných človekom môže mať zmysel zdokumentovaná politika normalizácie textu pred hashovaním, hoci názvy majú aj problémy s veľkosťou písmen a jazykom, ktoré jeden formulár Unicode nerieši. Pri heslách a autentifikácii sa normalizácia a hašovanie hesiel riadi špeciálnymi bezpečnostnými návrhmi; obyčajné heslo SHA-256 nie je dostatočné úložisko. Uveďte, či je cieľom bajtová identita, ekvivalencia normalizovaného textu alebo ľudská podobnosť. Sú to rôzne prísľuby a žiadny konvertor nemôže vyvodiť zamýšľaný len zo vzhľadu.

Pred zavedením pravidla pre normalizáciu napíšte dva testy: rovnaký viditeľný text v zloženej a rozloženej podobe a zámerne odlišný text. Prvý test má po zvolenej normalizácii viesť k rovnakým bajtom; druhý sa nesmie nečakane zlúčiť. Takto skontrolujete presný účel pravidla, nielen to, že hashovacia funkcia vráti nejaký výsledok. Zmeny pravidla treba verziovať spolu s uloženými dátami.

Vyskúšať konvertor

Normalizujte rozložené slovo s diakritikou na NFC.

NFC znaky kanonicky rozloží a opäť zloží do bežného komponovaného tvaru. Preveďte údaje lokálne v prehliadači.

Otvoriť celý konvertor

Ďalšie návody

Návody na konverzie

Prezrieť návody