Junior
Šta znaš o hash funkcijama?
sobes.tech АИ
Одговор од АИ
Hash funkcija (hash funkcija) — to je funkcija koja pretvara ulazne podatke (bilo koje veličine) u izlazni niz fiksne veličine, nazvan hash ili sažetak poruke.
Osobine hash funkcija:
- Determinističnost: Isti ulaz uvek daje isti hash.
- Efikasnost izračunavanja: Izračunavanje hasha treba biti brzo.
- Osetljivost na promene: Čak i mala promena ulaznih podataka treba da dovede do značajne promene u hashu ("efekat lavine").
- Jednosmernost: Praktično je nemoguće rekonstruisati originalne podatke iz hasha.
- Otpornost na kolizije: Trebalo bi biti veoma teško pronaći dva različita poruka koja daju isti hash.
Tipovi hash funkcija:
- Kriptografske hash funkcije: Koriste se u kriptografiji za obezbeđivanje integriteta podataka, digitalne potpise (MD5, SHA-1, SHA-256, SHA-3). MD5 i SHA-1 se smatraju manje sigurnim zbog pronađenih ranjivosti.
- Ne-kriptografske hash funkcije: Koriste se za ubrzanje pretraživanja podataka (npr. u hash tabelama), kontrolne sume (CRC32). Nemaju osobine otpornosti na kolizije ili jednosmernosti.
Primena hash funkcija u Pythonu:
- Hash tabele (rečići): Interno koriste hashiranje za brzi pristup elementima po ključu. Ključevi moraju biti hash-abilni (nepromenljivi).
- Skupovi (sets): Slično, koriste hashove za skladištenje jedinstvenih elemenata.
- Provera integriteta fajlova: Upoređivanje hash-ova pre i posle prenosa podataka.
- Čuvanje lozinki: Umesto da čuvaju same lozinke, čuvaju njihove hash vrednosti (sa solju za otežavanje napada putem rečnika).
- Kriptografske operacije: Biblioteka
hashlibpruža pristup različitim kriptografskim hash funkcijama.
Primer korišćenja hashlib:
import hashlib
data = b"Hello, world!" # Ulazni podaci moraju biti u bajtovima
sha256_hash = hashlib.sha256(data).hexdigest()
print(f"SHA-256 hash za '{data.decode()}': {sha256_hash}")
# Primer promene podataka
data_changed = b"Hello, world!!"
sha256_hash_changed = hashlib.sha256(data_changed).hexdigest()
print(f"SHA-256 hash za '{data_changed.decode()}': {sha256_hash_changed}") # Hash će se značajno promeniti
Svojstva hashabilnih objekata u Pythonu:
- Objekat mora imati metodu
__hash__, koja vraća celo broj. - Objekat mora imati metodu
__eq__za poređenje na jednakost. - Ako
a == b, ondahash(a)mora biti jednakohash(b). - Obično, samo nemodifikovani (immutable) objekti (nizovi, brojevi, torke) su hashabilni po defaultu. Modifikovani objekti (liste, rečnici) nisu hashabilni.