• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Generator haseł php/codeigniter

Object Storage Arubacloud
+3 głosów
681 wizyt
pytanie zadane 7 kwietnia 2015 w PHP przez elaen Gaduła (4,760 p.)

Witam,

Mam taki problem, pisze generator haseł w php na stronie, i staram sie go jak najlepiej zoptymalizować, pokaże wam mój algorytm może ktoś podsunie mi lepszy pomysł którego nie zauwazyłem żeby to zaimplementować. Ogólnie generator ma losować wybranej długości hasło z liter i cyfr, ale jest możliwość jescze wybrania niektórych standardowych znaków aby losowało też wsród nich. Tak wygląda formularz, znaki są przechowywane w tablicy, każdy znak ma wartość swojego znaku w tablicy ASCII.

Oto kod kontrolera który generuje hasło (codeigniter):

private function _generujHaslo($data){
        $this->load->view('generator');
        
        
        if(isset($data['haslo_dlugosc']) && is_numeric($data['haslo_dlugosc']) && !isset ($data['haslo_znaki'])){
          $dlugosc=$data['haslo_dlugosc'];
          for($i=0; $i<$dlugosc;$i++){
              $wynik=  mt_rand(48, 122);
                while($wynik>=58 && $wynik<=64 || $wynik>=91 && $wynik<=96){
                $wynik=  mt_rand(48, 122);  
                }
            printf("%c", $wynik);
          }  
        }
        if(isset($data['haslo_dlugosc']) && is_numeric($data['haslo_dlugosc']) && isset($data['haslo_znaki'])){
            $dlugosc=$data['haslo_dlugosc'];
            $znaki=$data['haslo_znaki'];
            $znak_max=max($znaki);
            $znak_min=min($znaki);
            for($i=0; $i<$dlugosc;$i++){
                if($znak_min<48 && $znak_max>122){
                 $wynik= mt_rand($znak_min, $znak_max);   
                } else if($znak_min<=48 && $znak_max<=122){
                 $wynik= mt_rand($znak_min, 122);
                } else if($znak_min>=48 && $znak_max>=122){
                  $wynik = mt_rand(48,$znak_max);
                } else if($znak_min>=48 && $znak_max<=122){
                $wynik=  mt_rand(48, 122); 
                }
                    if($wynik>=48 && $wynik<=57 || $wynik>=65 && $wynik<=90 || $wynik>=97 && $wynik<=122){
                        printf("%c", $wynik);
                    }
                    else{
                        $testing=TRUE;
                        while($testing==TRUE){
                    foreach ($znaki as $row){
                        if($row==$wynik){
                            $testing=FALSE;
                            printf("%c", $wynik);
                            break;
                        }
                    }
                    $wynik=mt_rand($znak_min, $znak_max);
                    }
                }
            }
          }

Kod działa, pytanie czy może działać szybciej i czy ktoś ma może jakieś pomysły których ja nie dostrzegłem :)

Z góry dzieki za pomoc

2 odpowiedzi

+1 głos
odpowiedź 7 kwietnia 2015 przez TheBan Obywatel (1,400 p.)
Moim zdaniem choć się nie znam to kod działa dobrze i chyba szybko :)
+1 głos
odpowiedź 7 kwietnia 2015 przez krecik1334 Maniak (58,390 p.)

Nie no skrypt nie jest jakiś arcy szybki, złożoność algorytmu spora, ale chyba serwera nie rozwali.

Podobne pytania

0 głosów
1 odpowiedź 272 wizyt
0 głosów
2 odpowiedzi 1,167 wizyt
pytanie zadane 8 listopada 2018 w JavaScript przez Sobol3k Użytkownik (690 p.)
0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 15 sierpnia 2017 w SQL, bazy danych przez dobre.rece Nowicjusz (200 p.)

92,638 zapytań

141,514 odpowiedzi

319,901 komentarzy

62,018 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...