Egoblog.cz - Petr Kobelka

Heslo na přání

V tomto postu Vám nabídnu funkci, která vygeneruje heslo tak složité, jak si budete přát. Použití je opravdu jednoduché, stačí nakopírovat do svého PHP skriptu a použít.


PHP | Komentáře (1) | Shlédnuto 197698 × | Vloženo: 13. listopadu 2012

V nedávném článku Složitost hesla jsem se zabýval rozdílnou složitostí dvou hesel o stejné délce. Jedno z nich bylo složeno ze znaků abecedy, druhé z čísel.

 Na další popud Vám dávám k dispozici funkci pro skriptovací jazyk PHP, které Vám umožní jednoduše vygenerovat hesla podle přání.

Heslo na přání

Funkce bere na vstupu 2 argumenty. Prvním je požadovaná delka hesla - z bezpečnostních důvodů je spodní hranice omezena 5 znaky, aby náhodou nějakého dobráka nenapadlo mít hesla typu "aaa", "bb" apod. Druhým argumentem je volba množiny znaků, ze které bude heslo generováno. První argument bere libovolné celé nezáporné číslo, druhý pak předvolený typ:

  • 0 - pro čajíčky, nejjednodušší hesla
  • 10 - to už jsme dále, máme velká i malá písmena a už to po uživateli vyžaduje určité zapojení
  • 666 - pekelná obtížnost, tyhle hesla zjistí snad jen křišťálová koule

Funkce pro generování hesla

 function generuj_dobre_heslo($delka_hesla, $sila_hesla)
{
  $delka_hesla = intval($delka_hesla);
  $znakova_sada = 'UTF-8';

  //omezime spodni hranici delky hesla, nechci tam jednoduche kraviny typu "666", "aaa" apod.
  if ($delka_hesla < 5)
  {
    $delka_hesla = 5;
  }

  switch ($sila_hesla)
  {
    case 666: //to je peklo
      $mnozina_znaku = 'abcdefghijklmnopqrstuvwx123456789ABCDEFGHIJKLMNOPQRSTUVWX@#$%&';
    break;
    case 10:
      $mnozina_znaku = 'abcdefghijklmnopqrstuvwx123456789ABCDEFGHIJKLMNOPQRSTUVWX';
    break;
    case 0:
    default:
      $mnozina_znaku = 'abcdefghijklmnopqrstuvwx123456789';
    break;
  }

  $vystupni_heslo = '';

  while (mb_strlen($vystupni_heslo, $znakova_sada) < $delka_hesla)
  {
    $vystupni_heslo .= mb_substr($mnozina_znaku, rand() % (mb_strlen($mnozina_znaku, $znakova_sada)), 1, $znakova_sada);
  }

  //vratime vygenerovane heslo pro dalsi zpracovani
  return $vystupni_heslo;
}

Něco závěrem

Jen pro zajímavost uvádím výpočet teoretické složitosti hesla. Jako výchozí zvolíme 14 znaků pro heslo a chceme jej z množiny "10". Složitost takového hesla je pak 5714 = 3 821 624 208 892 275 481 335 249 možných variací. Tolik pokusů by útočník teoreticky potřeboval, aby vygeneroval vaše heslo a použil jej.

Máte k tomu nějaké informace? Chcete něco doplnit? Dejte mi o tom vědět do komentářů.

Petr Kobelka | Egoblog.cz | Tvorba www stránek - www.petrkobelka.cz

Petr Kobelka
Autor je zkušeným web developerem a programátorem s více než 10 letými zkušenostmi. Pracuje jako programátor pro známou Olomouckou společnost zabývající se tvorbou internetových a intranetových řešení. Spolu se zaměstnáním pracuje na volné noze a zabývá se tvorbou internetových stránek. Ve volném čase rád fotí, jezdí na kole, plave a cestuje.

Komentáře

E-mail je potřeba pouze pro vygenerování Gravataru!

1
Alex Kučera | vloženo 19. července 2014
Je to zajímavé a hned jsem to použíl. Díky. Jen jsem tvoji funkci ještě rozšířil o ne alfanumerické znaky jako jsou tečky, čárky, hashe apod.

Blog píše Petr Kobelka

Petr Kobelka - egoblog.cz

Žádám všechny, kteří mají zájem vkládat komentáře, aby se řídili pravidly NETikety. Komentáře, porušující tato pravidla můžou být bez varování smazány.