V tomto článku si ukážeme, ako jednoducho vytvoriť generátor hesiel pre svoje aplikácie. Script sa môže hodiť pri viacerých aplikáciách, kde je nutný prístup pomocou hesla. Princíp je veľmi jednoduchý, vystačíme si so základnými znalosťami PHP.

Ako každý program, aj tento má svoje výhody a nevýhody. Výhoda je hlavne v bezpečnosti systému. Môžeme tým odnaučiť užívateľov mať heslá ako 123456, abcdef, asdfghjkl, apd. Nevýhodou týchto generovaných hesiel je zapamätateľnosť u užívateľov. Nie každý užívateľ je schopný zapamätať si heslo typu hew45$s!. Administrátor by mal zvážiť klady a zápory tejto aplikácie a využiť ju vo svoj prospech.

Celá aplikácia sa bude skladať z jednej funkcie generuj_heslo() s jediným parametrom, ktorým je premenná $dlzka. Tá určuje, aký počet znakov bude mať vygenerované heslo. Ďalšia premenná, ktorú budeme potrebovať, je premenná $moznosti. Táto premenná obsahuje súbor znakov, z ktorých bude generátor náhodne vyberať znaky na vytvorenie konečného hesla. Pred volaním funkcie nesmiete zabudnúť inicializovať generátor náhodných čísiel, pretože by ste mohli generovať stále tie isté heslá. Namiesto rand() môže byť tiež použitá funkcia mt_rand(), ktorá je rýchlejšia a má lepší generátor náhodných čísiel a preto teoreticky generuje lepšie heslá.

Jadrom tohoto jednoduchého programu je cyklus, ktorý pri každom svojom opakovaní priradí premennej $heslo jeden náhodný znak z premennej $moznosti. Cyklus sa opakuje toľkokrát, až kým dĺžka premennej $heslo nedosiahne hodnotu $dlzka. Náhodné vyberanie znakov z premennej $moznosti sa koná pomocou funkcie substr(), ktorá má tri parametre. Prvý parameter je množina znakov. Druhým parametrom je číslo pozície znaku od ktorého sa má začať vyberať. Toto číslo je v našom prípade náhodne generované pomocou funkcie mt_rand(). Tretím parametrom je počet vyberaných znakov. To znamená, že pri každom opakovaní cyklu sa spusti funkcia substr(), ktorá vyberie z množiny znakov jeden náhodný a doplní ho do premennej $heslo.

<? php
mt_srand((double)microtime()*1000000); // inicializácia generátora náhodných čísiel
function generuj_heslo($dlzka) {
$moznosti=’abcdefghijklmnopqrstuvwxyz‘.
      ‚ABCDEFGHIJKLMNOPQRSTUVWXYZ‘.
      ‚0123456789‘.
      ‚!@$#%&*()+‘;
$heslo=““;
while(strlen($heslo) < $dlzka) {
  $heslo .= substr($moznosti, mt_rand(0, strlen($moznosti) – 1), 1);
  }
return($heslo);
}
$heslo=generuj_heslo(8);
?>

Tento generátor (zdrojový kód na stiahnutie) je veľmi užitočný, ale má jednu nevýhodu. Vygenerované heslo sa zapisuje priamo do HTML kódu (viď ukážku). Tento problém sa dá vyriešiť pomocou obrázkového generátora hesiel. Ten vytvoríme doplnením nasledujúceho kódu:

<?php
Header(„Content-type: image/png“);
// Vytvorenie obrázku a alokacia farieb
$obr=ImageCreate(85,20);
$cierna=ImageColorAllocate ($obr, 0, 0, 0);
$biela=ImageColorAllocate ($obr, 255, 255, 255);
// Zakreslíme reťazec
ImageString($obr, 5, 1, 1, $heslo, $biela);
//Obrázok vytlačíme a zrušíme
ImagePNG($obr);
ImageDestroy($obr);
?>

Základom je funkcia ImageString(). Používa sa na kreslenie viac znakov na obrázok. Kreslí reťazec „reťazec“ v obrázku „obrázok“ na súradnice x, y farbou „farba“. Ak je parameter písmo (1, 2, 3, 4 alebo 5), použije sa nejaké zabudované písmo. Väčšina použitých funkcií je už rozobratá v článku Obrázky a PHP – geometrické funkce, preto ich tu nebudem rozoberať, pozrite si rovno výsledok generátora.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

2 Příspěvků v diskuzi

Odpovědět