Jelentősen gyorsabb két fájlt hashelni majd a kapott hasht összehasonlítani, mint a két fájlt bitenként?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Eleve úgy kezdted a kérdést, hogy 2 fájl, erre kiderül, hogy 1000 db. Akkor most melyik?
Ha sok fájlod van, akkor:
1. generálsz hash-t minden fájlnak
2. összehasonlítod őket
3. ami egyezik, azt bájtonként leellenőrzöd, ami nem az különbözik
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Nézzük meg kicsit az esélyeket. Az MD5 128 bites adatsor, tehát összesen 2^128 = 3,4 * 10^38 különböző hash létezhet. Az md5 azt ígéri, hogy egy bitnyi információváltozás átlagosan a hash bitjeinek felét változtatja meg, így mondhatjuk azt, hogy nagyjából minden hash azonos eséllyel generálódik, ha mondjuk random tartalmat hash-elsz.
Tegyük fel, hogy nem 1000 fájlod van, hanem százmillárd. Ekkor ezek 10^11 * (10^11-1) féle módon képezhetnek párokat, ami kb. 10^22 különböző párt jelent.
Annak az esélye, hogy két fájl md5 hash-e megegyezik 1 : 34 028 236 692 434 128. Ez még mindig valószínűtlenebb, mint az, hogy kétszer egymás után lesz ötösöd a lottón.
Szóval igen, kvázi elhanyagolható az esélye annak, hogy két fájl md5 hash-e megegyezik. Elhanyagolható, de azért nem nulla.
Hogy a kérdésre is válaszoljak, attól függ, hogy mit és hogyan akarsz összehasonlítani. Pl. két fájl esetén ahhoz, hogy abból hash-t képezz, minden bájtján végig kell menni, és bájtonként több műveletet elvégezni. Ennél kisebb számítási kapacitást jelent, ha párhuzamosan mennél a két fájlon, és bájtonként összehasonlítanád (az egy ciklusváltozó növelés és egy összehasonlítás kb.). Tehát két fájl esetén gyorsabb a klasszikus módon összehasonlítani. Egyrészt ugye lehet a fájlméretet is összehasonlítani előtte, ez a legtöbb esetben – hacsak nem valami speciális tartalmú fájlról van szó – eleve nem fog egyezni. Ha a 3. bájtban találsz eltérést, akkor el is dőlt a dolog, nem kell a többi bájtot összehasonlítani, hiszen tudjuk, hogy eltérnek.
Megint más a helyzet, ha nem csak két fájlt kell összehasonlítani. Pl. mondjuk van egy weboldalad, azon van több ezer kép. Te azt akarod ellenőrizni, hogy az a kép már fel van-e töltve. Na akkor nem két fájlt kell összehasonlítanod, hanem a feltöltött fájlt az összes már a szerveren lévő fájllal, ami több ezer összehasonlítás. Oké, a fájlméretek miatt, lehet, hogy ténylegesen csak néhány összehasonlításról van szó, de pl. te le tudod tárolni a feltöltött képek hash-ét, akkor csak generálni kell az új fájlnak egy hasht, és azt összehasonlítani a többi fájl tárolt hash-ével. Ha adatbázisban tárolod a hash-eket, akkor ráadásul a megnyitott fájlok száma, a merevlemez terhelése is erősen csökkenni tud. De néhány ezer fájlnál még beleférhet a fájlméret összehasonlítás, és annak egyezése esetén a tartalom összehasonlítása is, hiszen az általában azért az első néhány bájtnál már különbséget fog mutatni.
Megint más a helyzet, ha egyező méretű fájlokról van szó, mondjuk fix méretű bmp-ket kell összehasonlítani. Ott már biztos, hogy megéri hash-t összehasonlítani.
Az átviteli közeg sem lényegtelen. Nem véletlenül szokták használni fájlletöltésnél a hash-eket. Oké, letöltöttél egy fájlt. Most ellenőrizni kellene, hogy minden bájtját jól töltötte-e le. Ehhez kvázi újra le kellene tölteni, ami nem mindegy. Ehelyett elég lokálisan generálni egy hash-t a letöltött tartalomról, és megnézni, hogy a távol tárolt hash egyezik-e vele.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!