Autor Zpráva
radecek
Profil
Ahoj,

planuju udelat fotogalerii. Nazvy fotek chci ukladat jako hash obsahu jeho souboru: (sha1_file("obrazek.png")).
SHA1 mi vraci 40 cislic a malich pismen to by melo odpovidat 40^36 kombinaci ne? Je nejaka pravdepodobnost ze by se nasly jine soubory se stejnym hashem?

Je to jen otazka vim ze to jde delat pres nahodna cisla. Dekuji za vasi odpoved
Taps
Profil
radecek:
ted mě ještě napadlo a co třeba využít funkci time.
Leo
Profil
Proč chcete ukládat soubory pod nesmyslným (náhodným) názvem? Leo
radecek
Profil
Taps: spise me zajima jak se chova hash..

Leo: jak bych je mel ukladat? Pod tim jak je nahraji uzivatele? Nechci si udelat galerii kde budu nahravat fotky jen ja.. Vim ze je to trosku velky plan do predu, ale kdybych mel 10 000 tak velka kvanta fotek stejne uz nemuzu prochazet jakou soubory v adresari, takze je mi jedno jak se jmenuji. hashem souboru bych ale mohl vyloucit stejne soubory a tim by na disku nevznikaly duplicitni obrazky.

Toto je ciste teoreticka otazka :)
_es
Profil
radecek:
Je nejaka pravdepodobnost ze by se nasly jine soubory se stejnym hashem?
Áno je, no je to veľmi nepravdepodobné.

ze to jde delat pres nahodna cisla.
Pri generovaní náhodných čísel sa ti tiež môže stať, že bude vygenerované znova to isté číslo.
Leo
Profil
"Leo: jak bych je mel ukladat? Pod tim jak je nahraji uzivatele?"

Třeba pod číslem, které v MySQL tabulce vygeneruje auto increment na PK. Generování hashe je zbytečná zátěž serveru. Leo
Joker
Profil
radecek:
spise me zajima jak se chova hash
Je to samozřejmě jak popisujete. Výsledkem SHA1 je 160-bitový hash, takže logicky vezmete-li všechny 161-bitové kombinace a uděláte jejich SHA-1 hashe, musejí vzniknout kolize.
Když víte, že SHA-1 hash má 160 bitů a tedy 2^160 možných kombinací, je vcelku jednoduché si spočítat pravděpodobnost kolize dvou náhodných vstupů: 1/(2^160)
pro zajímavost je to pravděpodobnost 1 : 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976 ... čili i pro trilion obrázků v databázi ta pravděpodobnost kolize pořád je tak malé číslo, že ho kalkulačka v Linuxu zobrazí jako 0 :-)
Carrot
Profil *
radecek:
Je nejaka pravdepodobnost ze by se nasly jine soubory se stejnym hashem?
Reálně nula. Bezkolisnost je základní vlastnost hashe. Bez ní by nefungoval.
Bubák
Profil
Carrot:
Reálně nula. Bezkolisnost je základní vlastnost hashe. Bez ní by nefungoval.
Reálně se blíží nule, kolize jsou nežádoucí vlastností hashe. Hashe fungují, protože pravděpodobnost kolizí je malá. I kdyby radecek použil MD5 hash (používá pro názvy souborů český validátor), je pravděpodobnost kolize mizivá.

radecek:
Myslím si, že než probítat pravděpodobnost kolize hashe, udělal byl líp, kdybys třebas v sekci "Jak něco udělat", nebo v "PHP" založil téma "Vytvoření unikátního jména fotky", tam napsal, o jakou fotogalerii půjde. Mám tím na mysli, zda budeš uploadovat fotky jen ty, nebo třebas i neregistrovaní uživatelé. A taky, zda by vadilo, kdyby se stejný obrázek ubjevil vícekrát, což můžu udělat třebas tak, že uploadnu fotku třebas s pozměněným EXIFem..., možností jak poslat obrazově shodný, nebo podobný obrázek, je spousta.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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