Autor Zpráva
Martufi
Profil
Dobrý den,

Zajímal by mně rozdíl mezi "Hašováním" a "Šifrováním" (Týká se to především PHP jazyka). Na internet je plno informací ohledně samotného šifrování, ale nikde jsem nenašel hašování, nebo dokonce rozdíl mezi nimi.

Budu moc rád za jakékoliv osvětlení a pomoc.

Díky Martin
lionel messi
Profil
Martufi:
Zajímal by mně rozdíl mezi "Hašováním" a "Šifrováním"
Hash nie je zakódovanie reťazca, ale iba jeho odtlačok. Šifra je zakódovanie reťazca.
juriad
Profil
šifrovaní - vstupní text přetransformuje na jiný, ze kterého není původní zřejmý. Pak existuje dešifrovací proces, který provede opačný převod. Šifrovaní je téměř vždy závislé na nějakém parametru, který někdo zná, ale není veřejně známý.
Když si vezmeš třeba (triviální) Caesarovu šifru, tak tam je parametrem posunutí. Takže při posunu o 3 se z martufi stane pduwxil.
Obecně existují dva způsoby šifrování:
- symetrické - oba účastníci musí znát stejný parametr (v případě Caesarovy šifry to je to posunutí (3))
- asymetrické - každý účastník zná veřejnou informaci o tom druhém, kterou použije k zašifrování a přijemce si dešifruje za pomoci své soukromé informace. Toto není lehké si představit a nejběžnější algoritmus RSA používá jako parametry dvě gigantická prvočísla (jedno řekneš každému a to druhé si necháš pro sebe).

hashování - vstupní text přetransformuje na jiný, ze kterého není původní zřejmý. Ale neexistuje zpětný proces získání původního textu. Slouží pro rychlé porovnávání textů (abys nemusel porovnávat celý, stačí porovnat jen jejich hashe).
Příklad: pro řetězce třeba stačí sečíst kódy písmen modulo nějaké číslo. Z martufi se stane 13+1+18+20+21+5+9 = 87.
Spousta řetězců bude mít stejný kód, ale je dost velká šance (při lepším způsobu hashování), že kolize nastane s malou pravděpodobností.
Hashování se používá také k ověřování. Někdo ti pošle text a ty chceš zjsitit, zda je dostatečně shodný jako nějaký předchozí. Ale ten předchozí si nechceš pamatovat, protože by ti jej někdo mohl ukrást. Vidíš tam podobnost s hesly?
Ještě dodám, že můžeš chtít, aby hash šel spočítat:
- rychle - pro porovnávání třeba souborů (chceš ověřit, že to co jsi stáhl z internetu je bez chyby, nebo že ti někdo nepodstrčil vir místo instalačky) *
- pomalu - nechceš, aby někdo zkoušel silou rychle generovat kolizní hashe (texty se stejným hashem)
Nejpoužívanější hashovací algoritmy jsou MD5 a SHA1 (pro rychlé porovnání) a pro hesla se drž php.net/manual/en/faq.passwords.php.
Člověk třeba často hashuje telofonní čísla - pamatuje si poslední trojici číslic a věří, že často nepotká dvě telefonní čísla, která končí stejně.

* Ukázka: www.archlinux.org/download
Stáhni si ten velký iso soubor o velikosti 637.0 MB odkudkoli. A abys ověřil, že jsi opravdu stáhnul to, co jsi měl a nikoli něco jiného (ať už se to stalo z libovolného důvodu), můžeš zkusit zkontrolovat hash toho velkého souboru. Ty, které by ti měly vyjít jsou uvedené na stránce v sekci Checksums.
Joker
Profil
Martufi:
Krátce by to šlo říct:

Hash je jen otisk (šlo by říci cosi jako „kontrolní součet“) vstupních dat, nezachová všechny informace a typicky není možné z něj vstupní data rekonstruovat*.

Při šifrování se informace neztrácí a je možné zpětně dešifrovat původní data.

* Samozřejmě lze původní vstup rekonstruovat v případě, že vedle hashe o něm mám ještě další informace. Například z informace, že MD5 vstupu je 955db0b81ef1989b4a4dfeae8061a9a6, není možné určit, jaký byl vstup. Pokud ale navíc vím, že to je MD5 pětiznakového uživatelského hesla, dá se s jistotou říci, že vstup je "heslo".

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: