[[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'};