Ugrás a tartalomhoz

hasítófüggvény

A Wikiszótárból, a nyitott szótárból

Kiejtés

  • IPA: [ ˈhɒʃiːtoːfyɡveːɲ]

Főnév

hasítófüggvény

  1. (matematika)

Hasítófüggvény (Hash Function)

A hasítófüggvény (angolul hash function) egy olyan függvény, amely egy tetszőleges méretű adatot fix hosszúságú bitláncra (hash érték) alakít át. Ezeket az értékeket gyakran használják adatstruktúrákban (pl. hash tábla), kriptográfiában, ellenőrző összegek generálására, vagy adat-összehasonlításra.



1. Hasítófüggvény jellemzői

  1. Determináltság:
    • Azonos bemenetekhez mindig azonos kimenetet kell társítania.
  2. Gyors számítás:
    • A hasítófüggvénynek hatékonyan kiszámíthatónak kell lennie.
  3. Egyenletes eloszlás:
    • Az értékek egyenletesen kell, hogy eloszoljanak a lehetséges hash tartományban, hogy minimalizálják az ütközéseket.
  4. Ütközések minimalizálása:
    • Két különböző bemenetnek a lehető legkisebb valószínűséggel kell azonos hash értéket adnia.
  5. Változékonyság (kriptohash esetén):
    • A bemenet bármilyen kis változtatása jelentősen megváltoztatja a hash értéket (Avalanche Effect).



2. Típusai

a. Kriptográfiai hash függvények

  • Tulajdonságok:
    1. Ütközés-ellenállás: Nehéz találni két különböző bemenetet, amelyek azonos hash értéket adnak.
    2. Preimage-ellenállás: Egy hash kimenet alapján nehéz visszafejteni az eredeti bemenetet.
    3. Második-preimage-ellenállás: Egy adott bemenet hash kimenetéhez nehéz másik bemenetet találni ugyanazzal a kimenettel.
  • Példák:
    • MD5: Elavult, nem biztonságos.
    • SHA család:
      • SHA-1: Elavult, de még használják ellenőrzésekre.
      • SHA-256: Modern és biztonságos hash függvény.

b. Nem kriptográfiai hash függvények

  • Tulajdonságok:
    • Nem biztosítanak ütközés-ellenállást, de gyorsak és hatékonyak.
  • Példák:
    • Modulo hash: Kulcs % tábla mérete.
    • MurmurHash: Gyors és hatékony.
    • DJBX33A: Egyszerű algoritmus szöveges adatokhoz.



3. Hasítófüggvény használata

a. Hash tábla

  • Egy hash tábla olyan adatstruktúra, amely kulcs-érték párokat tárol. A kulcsok hasítófüggvényen keresztül kerülnek a megfelelő memóriahelyekre.

b. Kriptográfia

  • Jelszavak tárolása.
  • Digitális aláírások.

c. Adatellenőrzés

  • Ellenőrző összegek kiszámítása adatátvitel vagy fájlok sértetlenségének biztosítására.



4. Pseudocode

Egyszerű hash függvény

function hash_function(key, table_size):
    hash_value = 0
    for char in key:
        hash_value = (hash_value * 31 + ord(char)) % table_size
    return hash_value

5. Python implementáció

Egyszerű hash függvény

def hash_function(key, table_size):
    hash_value = 0
    for char in key:
        hash_value = (hash_value * 31 + ord(char)) % table_size
    return hash_value

# Használat
key = "hello"
table_size = 10
print(f"Hash érték: {hash_function(key, table_size)}")

SHA-256 hash függvény

import hashlib

def sha256_hash(data):
    return hashlib.sha256(data.encode()).hexdigest()

# Használat
data = "hello"
print(f"SHA-256 hash: {sha256_hash(data)}")

6. C++ implementáció

Egyszerű hash függvény

#include <iostream>
#include <string>
using namespace std;

unsigned int hashFunction(const string& key, int tableSize) {
    unsigned int hashValue = 0;
    for (char ch : key) {
        hashValue = (hashValue * 31 + ch) % tableSize;
    }
    return hashValue;
}

int main() {
    string key = "hello";
    int tableSize = 10;
    cout << "Hash érték: " << hashFunction(key, tableSize) << endl;
    return 0;
}

SHA-256 hash függvény (OpenSSL könyvtárral)

#include <iostream>
#include <string>
#include <openssl/sha.h>

using namespace std;

string sha256(const string& data) {
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256(reinterpret_cast<const unsigned char*>(data.c_str()), data.size(), hash);

    string result;
    char buffer[3];
    for (int i = 0; i < SHA256_DIGEST_LENGTH; ++i) {
        snprintf(buffer, sizeof(buffer), "%02x", hash[i]);
        result += buffer;
    }
    return result;
}

int main() {
    string data = "hello";
    cout << "SHA-256 hash: " << sha256(data) << endl;
    return 0;
}

7. Gyakorlati alkalmazások

  1. Adatok tárolása és keresése:
    • Hash táblákban történő gyors kulcsalapú keresés.
  2. Kriptográfia:
    • Biztonságos jelszavak tárolása.
    • Digitális aláírások.
  3. Adatintegritás:
    • Hash értékek használata fájlok ellenőrzésére (pl. letöltések esetén).

Fordítások