Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SHA256
Forum PHP.pl > Forum > PHP
xurexPL
Witam.
Ostatnio trochę poczytałem na temat sha256 i sobie pomyślałem, że skoro z każdego komputera wychodzi ten sam hash (np. dla wyrazu pies - 0f2907ce9dfc41381d6039cd054f8cb33c4ab2f6520210035e2a32b04bc2b7d3) to musi być jakiś system (mimo to, że zmiana jednej literki daje zupełnie coś innego smile.gif)
Ale nie to pytanie nurtuję mnie najbardziej. Jest inne, a mianowicie:

Z tego co czytałem - da się wygenerować hash dla każdego słowa, ciągu liter itd.
Ale skoro hash ma tylko 64 znaki, to jakim cudem jest wstanie przedstawić dowolne kliknięcia na klawiaturze?
Gdyby generować hash dla wyrazu pies, a następnie wygenerować hash hashu wyrazu pies i z każdym kolejnym robić to samo, "to po pewnym czasie" wygenerujemy więcej kodów, niż jest możliwości.
A więc stąd moje pytanie: Co się wtedy stanie? Czy istnieje możliwość, że dwa "wyrazy" mają taki sam hash?
Bardzo proszę o odpowiedź, jeśli ktoś jest w stanie mi takowej udzielić smile.gif

Pozdrawiam.
Crozin
Jak zauważyłeś ilość możliwych danych jest właściwie nieskończona, a ilość możliwych kombinacji (wyników) dla SHA-256 to dokładnie 2^256 (duuuuużo) czyli liczba skończona. Innymi słowy, tak jak w przypadku każdej innej funkcji skrótu istnieje nieskończenie wiele par, takich, że:
Kod
HASH(a) = HASH(b)
xurexPL
Nie zbyt rozumiem, ale z logicznego punktu widzenia ilość kombinacji to:
64 znaki i w każdym z nich dowolny znak,
czyli kodując każdą z możliwych kombinacji mających 64 znaki i na każdym miejscu dowolny znak wyjdzie: liczba hasy sha256 = liczba naszych 64 znakowych zdań.
Jeśli "pewien" komputer by to obliczył stosunkowo szybko to wszystkie kombinacje zostałyby wykorzystane i tworzenie nowych hasy było by po prostu nie możliwe.
I co się stanie gdy ktoś wygeneruje hash np. literki a? Skoro każdy hash został już "zajęty" przez n ciągów 64 znaków to jaki hash przypadnie literce a?
Czy literka a będzie musiała dzielić hash z inną kombinacją znaków?

Skoro ilość możliwych kodów sha256 to 2^256, a sam kod składa się z 64 znaków, to dla ciągu składającego się z 64 znaków wynik również wyniesie 2^256.
Tylko, że zawsze można wygenerować hash dla literki A i już wtedy dla 2^256 możliwości będzie użytych 2^256, a nie 2^256 + 1 (gdzie 1 oznacza hash dla literki A), bo wtedy byłby to paradoks smile.gif
com
nikt Ci nie odpowie na pytanie czy a dzieli swój hash z czymś innym, ale tak jak napisał Crozin istnieje nieskończenie wiele par, którym dopasujesz jeden hash do drugiego bo będzie taki sam.
xurexPL
To dzięki za odpowiedź. smile.gif
com
żebyśmy się dobrze zrozumieli, nie chodzi o to ze nie chcę, tylko nie jesteś wstanie tak z marszu podać takiej sumy która daje ten sam hash dla rożnych payloadów i o to w tych funkcjach hasujących chodzi smile.gif
redeemer
Dodam tylko, że gdy funkcja skrótu tworzy taki sam hash dla różnych danych wejściowych to nazywa się to kolizją.

https://pl.wikipedia.org/wiki/Kolizja_(kryptografia)
https://en.wikipedia.org/wiki/Collision_(computer_science)
darko
A znajdowanie kolizji, pozwala np. autoryzować się w systemach, które sprawdzają jedynie rezultat funkcji skrótu bez tzw. soli, innymi słowy, można znaleźć taki ciąg znaków, który po przemieleniu przez daną funkcję skrótu wygeneruje identyczny hash i umożliwi np. zalogowanie się w jakimś starszym systemie.
xurexPL
Już wszystko rozumiem - dziękuję wszystkim za odpowiedzi smile.gif
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.