Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: md5
Forum PHP.pl > Forum > PHP
rzseattle
Cytat
Ja mam takie pytanie OT. Hashe przeciez mosza sie powtazac skoro md5 koduje dowolnej dlugosci string do 32 znakow. Wiec jak to jest, md5 polega na bardzo malym prawdopodobiestwie powtorzenia sie hasha? Przeciesz wlasciwie nie ma innej mozliwosci przy takim rozwiazaniu.  Przy duzych listach hasel takie rozwiazanie wydaje sie niedopuszczalne. Moze ktos mi to wyjasnic?.


Wydzielilem moj post, tutaj chyba lepiej pasuje winksmiley.jpg. Chce wykozystac md5 do cachowania, a konkretniej do tworzenia stinga odpowiadajacego stanowi obiektu [php:1:e515c1e4b4]<?php
md5(print_r($this,1));
?>[/php:1:e515c1e4b4]

Problem w tym ze takich wpisow moze byc naprawde duzo a string zwrocony przez print_r jest dosyc duzy. I wlasnie sie zastanawiam jakie jest prawdopodobienstwo powtorzenie sie hasha.
GrayHat
hmm w duzym lotku jakie jest prawdopodobienstwo trafienia 6?? jeden do kilku miliardow jak sie nie myle (no moze do milionow). a tutaj jeszcze do kwadratu....
rzseattle
Cytat
hmm w duzym lotku jakie jest prawdopodobienstwo trafienia 6?? jeden do kilku miliardow jak sie nie myle (no moze do milionow). a tutaj jeszcze do kwadratu....


Twojej odpowiedzi najmniej sie spodziewalem za to jej tresc jakos mnie nie zaskoczyla :? .

Roznica jest taka ze w duzym lotku skreslasz tylko szesc cyferek i losujesz z 45 (chyba), a tutaj twoje skreslenie jest dowolne i zawsze uzuskujesz 32 znakowy srting. Nawet jesli przwdopodobienstwo jest male to i tak powtazalnosc hasha ulatwiala by znacznie BRUTE FORCE.
Ale jak juz wspomnialem nie chodzi mi o hasla ktore zgory maja ustalony przedzial dlugosci ale o stan obiektu ktory moze byc naprawde bardzo rozny, obiekt obsluguje baze danych (generowanie zapytan) i naprawde nie chcialbym aby do uzytkownika trafilo nie to zapytanie co trzeba.
DeyV
Ale wydaje mi się że w tym przypadku, chyba po raz pierwszy na tym forum, odpowiedz przedmówcy była poprawna.
Zauważ, że liczba o 32 znakach to całkiem spora wartość.
A jeśli zamiast cyfr mamy litery - kombinacji pojawia się odpowiednio więcej. Nie zamierzam tego przeliczać.

Natomiast zastanawia mnie coś innego. Jeśli chodzi o przechowywabnie wyników zapytania, to nie lepiej by było hashować samo zapytanie, zamiast całego obiektu? Efekt powinien być ten sam, ale a sam proces o wiele prostszy.
rzseattle
Cytat
Ale wydaje mi się że w tym przypadku, chyba po raz pierwszy na tym forum, odpowiedz przedmówcy była poprawna.  
Zauważ, że liczba o 32 znakach to całkiem spora wartość.  
A jeśli zamiast cyfr mamy litery - kombinacji pojawia się odpowiednio więcej. Nie zamierzam tego przeliczać.

No niby tak tylko ze tak naprawde dla mnie nie liczy sie ilosc kombinacji tylko powtarzalnosc generowanego ciagu, ktory przeciez nie jest generowany losowo. Teoretycznie jednemu hashowi odpowiada niskonczenie wiele ciagow znakow. Wiem ze w praktyce to wyglada inaczej ale jaki jest przedzial niepowtarzalnosci? Od zera do tysiaca znakow, czy zero do miliona, czy moze jeden do dziesieciu milionow ?Nawet jesli metoda na takich przedzialach jest pewna to z czystej ciekawosci chetnie bym uslyszal odpowiedz bo jakos dziwnie widze to ze md5 "1" i md5 tego posta moga miec ten sam hash (i do tego z prawdopodobienstwem ma to malo wspolnego).


Cytat
Natomiast zastanawia mnie coś innego. Jeśli chodzi o przechowywabnie wyników zapytania, to nie lepiej by było hashować samo zapytanie, zamiast całego obiektu? Efekt powinien być ten sam, ale a sam proces o wiele prostszy.


O to chodzi ze generowanie zapytania jest dosyc czasochlonne i jesli znalbym stan obiektu (wszystkie zmienne) to moglbym pominac generowanie i od razu zwracac gotowe zapytanie. I nie chodzi tu o przechowywanie wynikow tylko zapytan winksmiley.jpg.
spenalzo
http://www.ietf.org/rfc/rfc1321.txt -- MD5

Lub możesz użyć [manual:e2226b32db]sha1[/manual:e2226b32db] - zwraca 40 znakowy kod szesnastkowy.
http://www.ietf.org/rfc/rfc3174.txt

Zapoznaj sie z tymi dokumentami, a nabierzesz przekonania o znikomej (bardzo mało prawdopodnj) powtarzalności - gdyby tak nie było, to by nie była ta funkcja tak powszechnie używana do kodowania haseł jak teraz (a hasła są krótkie, powtarzalne itd).
Im dłuższy ciąg podstawisz do md5 tym lepszy wynik.
seaquest
Przy użyciu 36 znaków (liter bez ogonków i cyfr) otrzymujemy prawdopodobieństwo trafienia tego samego ciągu jak 1:36!(silnia) czyli 1:3,719933268x10^41. To naprawdę duuuuuża liczba. A pozatym string, który podlega funkcji md5 jest hashowany 4 albo 5 razy (nie pamietam)
goped
panowie co to znaczy cachowania?
seaquest
ale przeciez cachowanie z hashowaniem nie ma nic wspolnego, wiec goped nie rozumiem skad twoj post :?:
enceladus
Cytat
ale przeciez cachowanie z hashowaniem nie ma nic wspolnego

Może mieć i to sporo. Ja np. cache-uje elementy stron na podstawie różnych parametrów z których liczę hash md5, taki hash pozwala mi utworzyć katalog w którym trzymam plik. Np hash w postaci 01234567890 przekształcam na katalog z plikie 0/1/2/3/01234567890
rzseattle
Cytat
ale przeciez cachowanie z hashowaniem nie ma nic wspolnego, wiec goped nie rozumiem skad twoj post :?:


W tym przypadku ma winksmiley.jpg

Cytat
Chce wykozystac md5 do cachowania, a konkretniej do tworzenia stinga odpowiadajacego stanowi obiektu


Dziekuje wszystkim za odpowiedz, przekonaliscie mnie do tego ze md5 moze byc calkowicie bezpiecznym mechanizmem (ale i tak dam cachowanie na ograniczony przedzial czasu, przezorny zawsze ubezpieczony laugh.gif )

pozdrawiam
rzSeattle

update
Widze ze pan enceladus stosuje podobna metode smile.gif
goped
rzseattle, moglbys mi wytlumaczyc oco w tym chodzi dokladniej? prosze....
rzseattle
Cytat
rzseattle, moglbys mi wytlumaczyc oco w tym chodzi dokladniej? prosze....

chodzi o to ze mozesz stworzyc unikalnego stringa dla wielu zmiennych, czyli unikalnego dla odpowiednich waronkow zewnetrznych, jesli te warunki sie powtorza (porownojesz wygenerowane hashe) to mozesz pominac obliczenia ktore "duzo kosztuja" i od razu zwrocic gotowe wyniki. System bardzo przydatny dla optymalizowania duzych serwisow, gdzie dokladnie okreslona czynnosc pojawia sie co chwile, wtedy masz ja juz gotowa w zanadrzu.
Kocurro
dobra dołączę się do dyskusji...ktoś powiedział, że mogę się powtórzyć hashe...

polcizmy jak to jest możliwe...

mamy więc 32 znaki każdy ma możliwe wartości od 0 do 15, co daje 16 możliwych wartosći...łącznie uzyskujemy więc 16 do 32 potęgi różnych wartości reprezentowanych rpzez taki ciąg...

teraz zapiszmy to w systemie dwójkowym to mamy 2 do 4 do 32 potęgi a więc 2 do 128 potęgi...

wiem, że 2 do 32 potęgi to lekko ponad 4 miliardy, dla uproszczenia przyjmijmy, żę są to 4 miliardy (dla uproszczenia przyjmuje, że tylu jest ludzi na świecie - a po co to dalej)...

2 do 128 potęgi to to samo co 2 do 32 do 4...czyli 4 miliardy do potęgi czwartej

obrazowo przedstawiamy to tak :

każdy człowiek na Ziemi musiałby napisać 4 miliardy książek, każdą składającą się z 4 miliardów rozdziałów, po 4 miliardy słów każdy...

wtedy by zostały zużyte wszystkie możliwości...

oczywiscie to jest tylko i wyłącznie obraz...

w praktyce przyjmijmy, że prawdopodobieństwo powtórzenia sięhasha wynosi 1 do miliona...

a więc, żeby dwa takei same hashe były wygenerowane (jeśli używamy ich np. do sesji itp) to w danym momencie musiałby ponad milion ludzi oglądać naszą stronkę...

powiem szczerze, że nie znam strony która miałaby taką oglądalność...

a teraz wracajać już cąłkiem do tematu...

to czy hash się powtórzy czy też nie zależy od tego jaki ciąg jest poddany do hashowania...

dobrą praktyką jest podawać dany ciag (np. login, ip itp) + pewna wartość salt (np. aktualny czas -dzień, miesiać, rok, godizna, minuta, sekunda - lub microtime)...wtedy ryzyko wystapienia tych samych hashów drastcyznie siezmiejsza....


pozdrawiam
rzseattle
Cytat
dobrą praktyką jest podawać dany ciag (np. login, ip itp) + pewna wartość salt (np. aktualny czas -dzień, miesiać, rok, godizna, minuta, sekunda - lub microtime)...wtedy ryzyko wystapienia tych samych hashów drastcyznie siezmiejsza....

To juz powiedzialem we wczesniejszych postach.

A co do reszty to nie jest tak jak podales. No iby prawdopodobienstwo powtorzenia sie ciagow jest znikome ale dyrastycznie sie zwieksza w przypadku ciagow o roznej dlugosci - wiec to nie jest to prawdopodobienstwo ktore podales. Zrozom to ze 32 znakowy string odpowiada wszystkiemo wiec bardzo trodno okreslic jest gdzie konczy sie unikalnosc a zaczyna powtarzalnosc chyba ze opanowalo sie algorytmy md5 - a jesli tak to chcialbym uslyszec konkretna odpowiedz.
Kocurro
Wiesz to co ja pisałem to było luźne rozumowanie...

A co do powtarzalności to powiem Ci coś takiego:

czytałem wypowiedźjednego gostka, który prowadzi stronę i ma na niej dość ciekawy system statystyk - otóż każda odwiedzina jest zapisywana w bazie a aby łatwo się poruszać po niej używa hashowania za pomocą md5...jak się wypowiada do tej pory miał ponad 2 miliony wizyt i jeszcze nigdy hash mu się nie powtórzył...

nie wiem na ile można mu wierzyć...przyznam szczerze, że md5 to zbyt wysoka matematyka jak dla mnie...

ale to, że jest często używany oznacza, że jest on chyba dobry...

aha a jeśli zaś chodzi o hashowanie ciagów różnej długości - możesz stosować pewien stary trick...ustalasz jaka może być maksymalna długość tego ciągu...wiesz, że na niego skłąda sie np. numer ip, data i godzina - wiesz więc że najdłuższy ciag możliwy będzie miał n liter...ale może mieć takze mniej...to stosujesz uzupełnianie do n znaków...a gdy przypadkiem wyjdzie wiecej niż n znaków to obcinanie...

dzięki tej sztucce uzyskujesz ciag do hashowania o stałej długości co zwiększa niezawodoność...

a tą liczbę n najlepiej powiększyć dla pewności np. o 5-10 w zależnosći od tego jak długi jest ciąg...dodatkowo przy rozciąganiu należy wrzucać przypadkowe znaki...
rzseattle
@Prometeus

Dzieki ci za te odpowiedzi ale chcialem sie przekonac na ile prawdopodobne jest powtorzenia sie hasha stworzonego przez md5 , inne zabezpieczenia juz wprowadzilem smile.gif

Cytat
czytałem wypowiedźjednego gostka, który prowadzi stronę i ma na niej dość ciekawy system statystyk - otóż każda odwiedzina jest zapisywana w bazie a aby łatwo się poruszać po niej używa hashowania za pomocą md5...jak się wypowiada do tej pory miał ponad 2 miliony wizyt i jeszcze nigdy hash mu się nie powtórzył...

to akurat jest bez znaczenia dla stringow dla BARDZO zmiennej dlugosci - dlatakich stringow prawdopodobienstwo wystapienia jest o wiele wieksze.

No ale reszta "dobrych" rad to w zasadzie OT bo - czas zycia okeslinego hascha juz wprowadzilem
Kocurro
Sorry, że nie pomogłem...
rzseattle
Cytat
Sorry, że nie pomogłem...

To akurat nie prawda, bardzo cieszy mnie dyskusja odnosnie kazdego tematu, ale przy "dawaniu rad" przydalo by sie przeczytac wczesniejsze posty, ktore w tym przypadko mowia ze do hasha dobrze jest dodac jakies zewnetrzne dane np date.
Paul
Cytat
przyjmijmy, żę są to 4 miliardy (dla uproszczenia przyjmuje, że tylu jest ludzi na świecie - a po co to dalej)...


6,5 mld - chinczycy o to dbaja winksmiley.jpg, bo chca na ksiezyc leciec - jak stana jednen na drugim to siegna winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.