[[oktatas:programozás:perl|< Perl]] ====== Perl hash ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2011, 2015 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== A hashről ===== Hash alatt kétféle dolgot érthetünk. Egy **adattípust** és **függvényeket**. Lényegét tekintve mindkettő hasonló, de más-más területen használjuk. A magyar nyelven kivonatnak is nevezzük. **Adattípusként** adatokat tárolunk egy hash típusú változóban. Az adatokra jellemző, hogy kulcs és érték párokból állnak. Új adat felvétel esetén egy algoritmus keresi az olyan kulcsot, amely még nem létezik. A **hash függvényekkel** adatsorokhoz tartozó kulcsokat állíthatunk elő, adott algoritmussal. A hash függvények jellemzője, hogy csak egyirányú algoritmusok, vagyis a kulcsból nem állítható elő az adatsor. Az előállított kulcsok mindig különböznek. Elvileg előfordulhat, hogy két adatsorból azonos kulcsot állítunk elő, azonban ennek gyakorlati esélye nagyon kicsi. Láthatjuk, hogy mindkét esetben van egy kulcs és a hozzátartozó adat. A kulcs alapján azonosítható az adat. Az elv ugyanaz, de más területen használjuk. A hash függvények felhasználásának két példája: Adott egy DVD képfájl, és szeretnénk egy rövid karaktersorozatot, kulcsot, vagy másként mondva hash szöveget hozzárendelni. A hash szöveggel ellenőrizhetjük a DVD képfájl sértetlenségét. Másik felhasználási területe a jelszavak titkosítása. ===== Hash függvények ===== ==== Minta 001 ==== mcedit tit.pl #!/usr/bin/perl printf("crypt => '%s'\n", crypt("titok", '$6$sosososo$')); Futtatás és annak eredménye: chmod u+x tit.pl ./tit.pl crypt => '$6$sosososo$sFbKykZmKl/KqRsFA7oIwO2SrLAqT0JB/JA2.ooSTpzIajwUyVQtOX9FDn85pKkX4hh2q3bmNRessW/lGXUGY1 ==== Minta 002 ==== A következő példához telepíteni kell a digest-sha perl modult. Debian GNU/Linuxon ez például így lehetséges: apt-get install libdigest-sha-perl Ezek után egy mintaprogram: #!/usr/bin/perl use Digest::SHA qw(sha512_hex); my $kivonat = sha512_hex("hello"); print "$kivonat\n"; ===== Hash típus ===== %janos = ( 'név' => 'János', 'kor' => 28, 'fizetés' => 875000.0 ); print $janos{'kor'};