Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Algorytm hashujący
Forum PHP.pl > Forum > PHP
daniel1302
Witam szukam informacji jak napisać własny system hashowania danych niekorzystając z gotowych funkcji hashujących
mike
Z ciekawości zapytam: po co?
Pisanie własnych algorytmów hashujących czy szyfrujących ma sens tylko jak jesteś wojskowym albo z NASA, poza tym to strata czasu.
daniel1302
Ma sens zawsze. Nieznając kodu ani mechanizmu szyfrowania zmniejsza się możliwość shackowania strony a to piszę dla kolegi.
Jeśli algorytm będzie mój to kod będzie mój czyli mogę sobie przesyłać dane w linkach(hasła, sessid) i będę bezpieczny
mike
Cytat(daniel1302 @ 26.08.2008, 08:34:38 ) *
Ma sens zawsze. Nieznając kodu ani mechanizmu szyfrowania zmniejsza się możliwość shackowania strony a to piszę dla kolegi.
Jeśli algorytm będzie mój to kod będzie mój czyli mogę sobie przesyłać dane w linkach(hasła, sessid) i będę bezpieczny
Bzdura. Wszyscy znają algorytm md5 czy sha1 i jakoś ponad połowa internetu ma się dobrze.
Zainteresuj się algorytmami bo tak się składa że jawnosć algorytmu na marginalne znaczenie jeśli chodzi o jego bezpieczeństwo.

Jeśli natomiast piszesz, że chcesz przesyłać sobie w URLu dane, które wymagają aż takiej troski to popracuj nad polityka bezpieczeństwa aplikacji a nie nad algorytmem bo to strata czasu.

P.S.
Nie używaj zamiennie słów szyfrować i hashować bo to calkowicie inne pojęcia. Wprowadzasz zamęt do własnej wypowiedzi.
daniel1302
Niechce przesyłać ale podałem przykład ale np jeśli chcę z cieawości nauczyć się pisać taki algorytm?
php programmer
Jak sama nazwa wskazuje musisz namieszać, jest to całkiem proste jak to zrobisz zależy tylko od ciebie,
możesz np najpierw zamienić wszystkie znaki na ich kody ASCII i wszystko przemnożyć przez siebie
i ewentualnie dodatkowo przemnożyć przez jakąś liczbę pierwszą,

Następnie wyciągasz resztę z dzielenia przez jakąs liczbę
jaka to bedzie liczba to zależy od tego jak długi chcesz mieć hasz,
im mniejsza liczba tym krótszy będzie hasz,
oczywiscie nie moze być za krótki bo straci sens

Jak już bedziesz miał wynik możesz jeszcze
zamienić go na kod heksadecymalny i masz gotowy hasz.

przykładowa funkcja

  1. <?php
  2. function Haszuj($string){
  3. $strlen = strlen($string);
  4. $wynik = 2999; // jakaś duża liczba pierwsza
  5. for ($i=0;$i<$strlen;$i++) $wynik *= ord($string{$i});
  6. return dechex(abs(sin($wynik))*100000000000000);
  7. }
  8.  
  9. echo Haszuj('php programmer');
  10. ?>
zimi
Cytat
ale np jeśli chcę z cieawości nauczyć się pisać taki algorytm?

to najpierw dowiedz się co chcesz zrobić i do czego jest Ci to potrzebne? i czy jest sens abyś się tym zajmował

Cytat(mike)
Nie używaj zamiennie słów szyfrować i hashować bo to calkowicie inne pojęcia.

hmmm, aby na pewno...? w sumie jeszcze przed chwilą też tak mi się wydawało a potem wszedłem na http://pl.wikipedia.org/wiki/Haszowanie

zasadniczo mi się wydawało, że:
haszowanie - to funkcja skrótu która ma równomiernie i hmmm nieprzewidywalnie rozłożyć jedną dziedzinę na drugą aby stworzyć swego rodzaju etykietki (których nie nazwę identyfikatorami ze względu na fakt że funkcja nie musi być bijekcją)
szyfrowanie - to przetworzenie wartości za pomocą wykonania określonych operacji w taki sposób aby nikt niepowołany nie był w stanie odczytać wiadomości, jednak aby druga strona była do tego zdolna

jednak może haszowanie to po prostu mieszanie smile.gif nieważne czy ktoś to potem odmiesza czy nie biggrin.gif:P nie wnikam smile.gif

jednak nie ma tutaj prostej reguły na zrobienie jednego czy drugiego:
haszowanie może opierać się na dzieleniu modulo na xor-owaniu i na wielu innych operacjach
do szyfrowania można sobie przejrzeć RSA czy 3DES jeśli nic nie pomyliłem które opierają się na zupełnie innych rzeczach

dla szyfrowania to po prostu sposób zamieszania tak żeby nikt inny niepowołany nie był w stanie odmieszać
i nie ma znaczenia którego zagadnienia matematycznego użyjesz
to nie jest jak pisanie kodu mam algorytm RSA to dorzucę 3 linijki i algorytm będzie lepszy

za całą masą dowodów i wywodów czy coś da się złamać stoją nietuzinkowe obliczenia, za sprawdzeniem poprawności prawdopodobnie sztab specjalistów... to dwa powody dla których raczej nie robi się tego samemu...

a jeśli mimo wszystko chcesz wejść w to zagadnienie to chyba zacząłbym od wikipedii i linku który podałem można tamtędy dojść do paragrafu o unikaniu kolizji i pewnie innych ciekawych rzeczy przy tego typu operacjach
mike
Cytat(zimi @ 26.08.2008, 13:39:50 ) *
hmmm, aby na pewno...? w sumie jeszcze przed chwilą też tak mi się wydawało a potem wszedłem na http://pl.wikipedia.org/wiki/Haszowanie
No proszę. Tylko nie Wikipedia, to nie jest źródło danych, któremu należy ufać w 100%. Chcesz kogos odsyłać to odeslij do literatury fachowej.
Algorytmy haszujące (mieszające) są jednostronne nie można odhashować ("odmieszać"). Algorytmy szyfrujące są dwustronne i zaszyfrowane dane można odszyfrować.
Wymienne stosowanie tych nazw powoduje to, że co jakiś szas przychodzi na forum ktoś kto się naczytał i pyta czy można odszyfrować md5 tongue.gif
Crozin
Cytat
czy możne odszyfrować md5
Ale świat byłby wtedy piękny rolleyes.gif
Cytat
- Możesz pozyczyć mi płytkę z tą super, nową, ultra, hiper grą
- Daj kartkę, przepiszę Ci ją
wszystko do 32 znaków smile.gif
mike
Cytat(Crozin @ 26.08.2008, 13:56:43 ) *
Ale świat byłby wtedy piękny rolleyes.gif
A później Wikipedia by podała: md5() - najlepsza funkcja służąca do kompresji danych LOL
php programmer
A co nie jest piękny?
Jak chcesz coś zaszyfrować i potem odszyfrować to używasz szyfrów symetrycznych.
Zresztą jak by się dało odszyfrować md5 to by np administratorzy znali twoje hasła,
więc chyba lepiej że nie da się odszyfrować md5
Crozin
@php programmer: chodzi o to, że gdyby md5 dało się w normalnym czasie "rozkodować" byłby to najlepszy sposób kompresji danych. Nagle program zajmujący np. 1gb, jesteś w stanie zapisać w 32 znakach (32 bajty!). A administratorzy jak chca, ty wywalą przy rejestracji/logowaniu fragment kodu
  1. <?
  2. $password = md5($password);
  3. ?>
I już będą znali moje hasła (a raczej hasło).
nospor
Cytat
. A administratorzy jak chca, ty wywalą przy rejestracji/logowaniu fragment kodu
Po co wywalac? Wystarczy dopisac inna linijke ktora zapisuje hasla dodatkowo na boku winksmiley.jpg

pozatym poco cokolwiek robic? Wystarczy wejsc do bazy i zapuścic hashe przez rainbow table. wszystkie hasla ala tester lecą od razu. A ze wiekszosc skryptow uzywa tylko md5() to problemu nie ma smile.gif no i ze wiekszosc ludzi ma nadal hasla ala tester albo dupa 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.