Digitális és informatikai

Fájlhash összehasonlítása: miért változtat egy sortörés is az eredményen?

SHA-256 és fájlbájtok összehasonlítása. Azonosnak látszó szöveg eltérő LF- vagy CRLF-sorvéggel, méretellenőrzés és a referencia hash szerepe.

Dajka Gábor4 perc olvasás

Fájllenyomat összehasonlításakor az algoritmusnak átadott bájtok számítanak. Egy láthatatlan sortörés vagy eltérő szövegkódolás is más bemenetet ad. A helyes ellenőrzéshez az eredeti fájlt, az algoritmus nevét és a megbízható referenciaértéket együtt kezeld.

Mit számol a SHA-256?

A SHA-256 változó hosszúságú bemenetből 256 bites lenyomatot készít. A szabvány a bemenet hosszát 2^64 bit alá korlátozza; a böngészős eszköz gyakorlati méretkorlátja ennél jóval kisebb lehet. Hexadecimális megjelenítésben ez 64 karakter. Ugyanaz a bájtsor ugyanazzal az algoritmussal mindig ugyanazt az eredményt adja.

Szemléltető tesztpár lehet az „alma” és az „alma” utáni egy sortörés. A két bemenet látható tartalma könnyen hasonlónak tűnik, de bájtsoruk különbözik. Az eltérő hash így helyes eredmény. A sortörés eltávolítása már tartalommódosítás, ezért fájlellenőrzés előtt ne végezd automatikusan.

Honnan származik az összehasonlítási alap?

Letöltött fájlnál a saját gépen számolt lenyomatot a kiadó megbízható csatornán közölt értékével hasonlíthatod össze. Ha a fájlt és a hozzá adott hash-t ugyanaz a támadó módosíthatja, az egyezés önmagában nem igazolja az eredetet.

Az eltérő hash bizonyítja, hogy az algoritmusnak átadott bájtsorok különböznek. Az egyező hash erős gyakorlati ellenőrzés lehet megfelelő algoritmus és megbízható referencia mellett, de matematikailag nem jelenti, hogy minden lehetséges bemenetnek külön lenyomata van.

Szöveg vagy fájl legyen a bemenet?

Szöveges hash-eszköznél rögzíteni kell a kódolást, jellemzően UTF-8-at. Egy bináris fájl tartalmát nem helyettesíti a fájlnév vagy a szerkesztőből kimásolt szöveg. A böngészős digest API bájtokat dolgoz fel; a szöveget előbb megfelelően kell kódolni.

A kalkulátorban ellenőrizd az algoritmus nevét és a bemeneti módot. Készíts azonos bemenettel két futást, majd egyetlen karakter módosításával harmadikat. Így a determinisztikus működés és a bemenet jelentése is láthatóvá válik.

Négy, öt vagy hat bájt ugyanahhoz a szóhoz

UTF-8 kódolással, fájl eleji BOM és egyéb többletbájt nélkül az „alma” négy bájt. Egy hozzáfűzött LF sorvég még egy bájt, a CRLF sorvég kettő. A hexadecimális bájtértékek külön is megmutatják a különbséget.

A fájl tartalmaBájtszámHexadecimális bájtok
alma, záró sortörés nélkül461 6c 6d 61
alma, majd LF561 6c 6d 61 0a
alma, majd CRLF661 6c 6d 61 0d 0a

Erre a három konkrét bájtsorra három különböző SHA-256 lenyomat adódik. Ha egy letöltött fájl ellenőrzése eltér, előbb a fájl méretét, a sortörést és a kiválasztott bemeneti módot nézd meg. A referencia egyezéséért végzett automatikus szóköz- vagy sorvégtörlés módosítaná az ellenőrzendő fájlt. Ha viszont a feladat kifejezetten normalizált szövegek egyezését kéri, a normalizálási szabály legyen a feladat része, és a referencia is pontosan ugyanazzal az eljárással készüljön.

Kapcsolódó DG Kalkulátor megnyitása

Forrás és módszertani háttér

A számpéldák saját szemléltető számítások.

Háromkérdéses tudáspróba

Válassz kérdésenként egy választ, és jegyezd fel az A, B vagy C betűt. Előbb oldd meg mindhárom feladatot, utána nézd meg a megoldásokat.

1. SHA-256 hexadecimális megjelenítése hány karakter?

  • A) 32
  • B) 64
  • C) 256

2. A fájl végére tett sortörés módosíthatja a hash-t?

  • A) Csak nagy fájlnál
  • B) Soha
  • C) Igen

3. Az „alma” fájl UTF-8-ban 4 bájt, LF sorvéggel 5, CRLF sorvéggel 6 bájt. A három konkrét SHA-256 eltér. Mi a helyes következtetés?

  • A) Legalább két hash-számítás hibás
  • B) A három fájl eltérő bájtsort tartalmaz, ezért a különböző lenyomat indokolt
  • C) A fájlnév miatt változott meg a hash

Megoldások és önálló pontozás

Minden helyes válasz 1 pont; a hibás vagy kihagyott válasz 0 pont. Legfeljebb 3 pont szerezhető. 3 pont: A lenyomat hosszát és a tényleges bájtbemenetet helyesen értelmezted, és külön kezelted a tartalmat a megjelenítésétől. 2 pont: nézd át az eltévesztett kérdésnél megnevezett részt, és számold újra annak példáját. 0–1 pont: haladj végig a három megoldáson, majd oldd meg újra a kérdéseket. Ez a rövid próba a cikk összefüggéseinek megértését ellenőrzi.

1. megoldás

B) 64 – 256 bit / 4 bit hexadecimális jegyenként = 64. Ha más választ adtál vagy kihagytad, ezt a részt ismételd át: Mit számol a SHA-256?.

2. megoldás

C) Igen – A bemeneti bájtsor megváltozik. Ha más választ adtál vagy kihagytad, ezt a részt ismételd át: Mit számol a SHA-256?.

3. megoldás

B) A három fájl eltérő bájtsort tartalmaz, ezért a különböző lenyomat indokolt – A sorvégi 0a, illetve 0d 0a bájtok a fájltartalom részei. A SHA-256 ezeket is feldolgozza. A fájlnév ebben a tartalmi hash-számításban nem bemenet. Ha más választ adtál vagy kihagytad, ezt a részt ismételd át: Négy, öt vagy hat bájt ugyanahhoz a szóhoz.

További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás