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 tartalma | Bájtszám | Hexadecimális bájtok |
|---|---|---|
| alma, záró sortörés nélkül | 4 | 61 6c 6d 61 |
| alma, majd LF | 5 | 61 6c 6d 61 0a |
| alma, majd CRLF | 6 | 61 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.