Projektowanie stron WWW od podszewki
Losowy artykuł: Ludzie podobni do mnie

Artykuły na każdy temat

[PHP] Brute force

Dodano 08.04.2018r. o 09:18
Kiedyś rozwodziłem się nad wydajnością PHP i niedawno postanowiłem zweryfikować założenia. Pomimo całego tego hype na PHP 7 niewiele się nie zmieniło pod kątem obsługi dużej ilości operacji. Nawet po kompilacji skryptu moc przerobowa nie wzrosła znacząco. Przedstawiony poniższy kod stanowi najprostszą implementację algorytmu brute force.
Kod:
<?php
class factory
{
 private $charset 'abcdefghijklmnopqrstuvwxyz';
 private $charset_length;
 private $max_length 8;

 public function __construct()
 {
  set_time_limit(0);
  $this -> charset_length strlen($this -> charset);
 }

 public function brute_force($offset$string)
 {
  for($h 0$h $this -> charset_length; ++$h)
  {
   if($offset $this -> max_length 1)
   {
    $this -> brute_force($offset 1$string.$this -> charset[$h]);
   }

   $this -> valid($string.$this -> charset[$h]);
  }
 }

 private function valid($string)
 {
  // API call or whatever else
 }
}
?>

Czas wykonywania skryptu

Wykonany na nieobciążonym sprzęcie średniej klasy, bez zbędnych kompilacji i udziwnień konfiguracyjnych.
Maksymalna długość sekwencji Czas wykonywania sekwencji
1 0.0009s
2 0.0166s
3 0.0517s
4 0.3437s
5 9.4326s
6 249.8964s
7 6276.9599s
8 98173.0871s

Wnioski

Pomimo zastosowania podstawowego zestawu 26 znaków czyli [a-z] czas niezbędny do pełnego cyklu jest zbyt długi. Jeżeli dodalibyśmy jeszcze [A-Z], [0-9] oraz znaki specjalne to czas egzekucji wydłużyłby się jeszcze bardziej. W teście nie została uwzględniona instrukcja warunkowa oraz ewentualne obliczanie funkcji hash'u czy czegokolwiek innego tak samo jak wywołanie API/request sieciowy stąd można się z łatwością domyślać, że czas niezbędny do pełnego wykonania subrutyny znacząco się wydłuży.

Aby proces był wydajny należy zastosować język, który sprowadzi kod do postaci maszynowej. Katowanie kilkuwątkowych CPU nie jest optymalną drogą. Wydajniejszym sposobem będzie wykorzystanie wielordzeniowych GPU lub chmur obliczeniowych.

Komentarze

Brak komentarzy

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)