Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Szyfrowanie hasłem
Forum PHP.pl > Forum > Przedszkole
timon27
Witam. Czy istnieje w php jakaś funkcja szyfrująca stringi?
Chodzi mi o funkcję szyfrującą hasłem.
Szukam takiej, która nie wymaga dodatkowych klas,
oraz takiej, która używa silnego algorytmu,
czyli niemożliwej do złamania metodą inną niż brutal force.
qrooel
Sha1 + salt.

Szyfrowanie sha1 jest procesem teoretycznie nieodwracalnym przy odpowiedniej sile hasła.
timon27
Szukam funkcji szyfrującej, a nie hashującej.
Samo istnienie hasła sugeruje, iż szukam funkcji, którą można odwrócić (przy znajomości hasła oczywiście).
skowron-line
http://www.php.net/manual/pl/book.mcrypt.php

Zobacz sobie klasę (Encrypt) z Kohany 3 z wykorzystaniem tej funkcji.
timon27
No właśnie, gdziekolwiek nie szukałem, to widziałem że ludzie wykorzystują klasy.
Niestety przy obecnym problemie klasy są niewskazane, a poza tym moim zdaniem powinna być do tego prosta funkcja.

No trudno. Myślę, że sam napiszę taka funkcję przy wykorzystaniu jakiejś funkcji hashującej.


Jakby ktoś tu trafił z googla, to podaje funkcje szyfrowania hasłem.
Bez użycia klas.
Bezpieczna - złamanie jej jest tak trudne jak zlamanie md5.
Mało lini kodu - łatwo podmienić md5 na np. sha1, czy inny obsługiwany hash, każdy może prześledzić bezpieczeństwo.
Szybka - obliczanie szyfru odbywa się w czasie liniowym, niewiele dłużej niż obliczanie hasów md5.


  1. <?
  2.  
  3. function md_kodowanie($string,$haslo){
  4. $d=16; // długość hasha md5 podzielona na dwa (litera hasha w trybie 16wym)
  5. $new_ord['0']=0;
  6. $new_ord['1']=1;
  7. $new_ord['2']=2;
  8. $new_ord['3']=3;
  9. $new_ord['4']=4;
  10. $new_ord['5']=5;
  11. $new_ord['6']=6;
  12. $new_ord['7']=7;
  13. $new_ord['8']=8;
  14. $new_ord['9']=9;
  15. $new_ord['a']=10;
  16. $new_ord['b']=11;
  17. $new_ord['c']=12;
  18. $new_ord['d']=13;
  19. $new_ord['e']=14;
  20. $new_ord['f']=15;
  21.  
  22. $mgla=$haslo;
  23. foreach(str_split($string,$d) as $blok){
  24. $mgla=md5($mgla);
  25. $blok_wynik='';
  26. for($i=0;$i<$d;$i++){
  27. $litera_wejscia=substr($blok,$i,1);
  28. $litera_wejscia=ord($litera_wejscia);
  29. $litera1_mgly=substr($mgla,$i*2,1);
  30. $litera2_mgly=substr($mgla,$i*2+1,1);
  31. $litera_mgly=$new_ord[$litera1_mgly]*16+$new_ord[$litera2_mgly];
  32. $litera_wyniku=$litera_wejscia+$litera_mgly; //tu dodajemy
  33. if($litera_wyniku>255) $litera_wyniku=$litera_wyniku-256;
  34. $blok_wynik.=chr($litera_wyniku);
  35. }
  36. $wynik.=$blok_wynik;
  37. }
  38. return(base64_encode($wynik));
  39.  
  40. }
  41.  
  42.  
  43.  
  44. function md_dekodowanie($string,$haslo){
  45. $d=16;
  46. $string=base64_decode($string);
  47. $new_ord['0']=0;
  48. $new_ord['1']=1;
  49. $new_ord['2']=2;
  50. $new_ord['3']=3;
  51. $new_ord['4']=4;
  52. $new_ord['5']=5;
  53. $new_ord['6']=6;
  54. $new_ord['7']=7;
  55. $new_ord['8']=8;
  56. $new_ord['9']=9;
  57. $new_ord['a']=10;
  58. $new_ord['b']=11;
  59. $new_ord['c']=12;
  60. $new_ord['d']=13;
  61. $new_ord['e']=14;
  62. $new_ord['f']=15;
  63.  
  64. $mgla=$haslo;
  65. foreach(str_split($string,$d) as $blok){
  66. $mgla=md5($mgla);
  67. $blok_wynik='';
  68. for($i=0;$i<$d;$i++){
  69. $litera_wejscia=substr($blok,$i,1);
  70. $litera_wejscia=ord($litera_wejscia);
  71. $litera1_mgly=substr($mgla,$i*2,1);
  72. $litera2_mgly=substr($mgla,$i*2+1,1);
  73. $litera_mgly=$new_ord[$litera1_mgly]*16+$new_ord[$litera2_mgly];
  74. $litera_wyniku=$litera_wejscia-$litera_mgly; //teraz odejmujemy
  75. if($litera_wyniku<255) $litera_wyniku=$litera_wyniku+256;
  76. $blok_wynik.=chr($litera_wyniku);
  77. }
  78. $wynik.=$blok_wynik;
  79. }
  80. return($wynik);
  81. }
  82.  
  83.  
  84. echo md_kodowanie('Dane do zakodowania','Twoje tajne hasło!');
  85. echo '<br>';
  86. echo md_dekodowanie('U7lSOoQmjf1ikWwZscgyYu9lYNDD6f44+iBK3rL1PGM=','Twoje tajne hasło!');
  87. echo '<br>';
  88. ?>end.
nospor
Cytat
Bezpieczna - złamanie jej jest tak trudne jak zlamanie md5.
md5 można "złamać" obecnie w 10 sekund wink.gif

Cytat
Bez użycia klas.
Dziwne masz podejście... napisałeś dwie funkcje i już jesteś uradowany że nie użyłeś klas.... te dwie funkcje można zapisać jako klasę, tak samo jak prostą klasę można bez problemu zapisać jako funkcje.
timon27
Cytat
md5 można "złamać" obecnie w 10 sekund

Podaj proszę jakieś narzędzie, którym mogę złamać md5 w 10s (tylko nie hasła 3literowego).
Nie. Kolizja nie wystarcza do złamania szyfru.
Poza tym jak mówiłem, można użyć jakiegokolwiek innego hasha. W stosownym miejscu podmieniasz tylko md5, oraz modyfikujesz wartość $d.

Cytat
prostą klasę

No właśnie mcrypt chyba nie jest prostą klasą
nospor
md5 było dobre 20 lat temu. Teraz trzymając hasła w md5 jest niemalże równoważne z trzymaniem ich w jawnej postaci. Odnośnie md5 masz napisane sporo tu:
http://forum.php.pl/index.php?showtopic=44...t=0&start=0

Cytat
No właśnie mcrypt chyba nie jest prostą klasą
przecież w php mcrypt używasz jako wywołanie funkcji, nie musisz się bawić w jakieś klasy.
Nadal nie kumam co ci przeszkadzają klasy skoro i tak używasz funkcji. No ale mniejsza o to. Twoja sprawa.
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.