Tuesday, November 8, 2011

PHP generator jedinstvenog ključa

Ova PHP skripta generiše kljuc proizvoljne dužine i ključ koji je sastavljen od karaktera koje izabere sam korisnik


Skripta (funkcija) izgleda ovako:

<?php
function Generator_kljuca($duzina = 10, $karakteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
{
    $MIN_DUZINA_KLJUCA = 1;  
    $MAX_DUZINA_KLJUCA = 32;

    if ($duzina < $MIN_DUZINA_KLJUCA) $duzina = $MIN_DUZINA_KLJUCA;
    if ($duzina > $MAX_DUZINA_KLJUCA) $duzina = $MAX_DUZINA_KLJUCA;  

    $s = "";
    $broj_karaktera = strlen($karakteri) - 1;
    for ($i=0; $i<$duzina; $i++)
        $s .= substr($karakteri, mt_rand(0, $broj_karaktera), 1); 

    return $s;
}
?>

Pojašnjenje promenljivih:
  • $duzina - dužina ključa.
  • $MIN_DUZINA_KLJUCA - minimalna dužina ključa.
  • $MAX_DUZINA_KLJUCA - maksimalna dužina ključa.
  • $karakteri - spisak dozvoljenih karaktera od kojih se kreira ključ.
  • $s - string u kojem se kreira ključ.
  • $broj_karaktera - broj dozvoljenih karaktera od kojih se kreira ključ.
Prilikom pozivanja funkcije postoje dva parametra koja imaju podrazumevanju (default) vrednost. To su $duzina i $karakteri. U slučaju se funkcija pozove bez parametara:


echo Generator_kljuca();

rezultat će izgledati ovako (dužine 10 karaktera, sastavljen od podrazumevanih karatkera tj cifara, malih i velikih slova):

YT7frGtsm6


Ukoliko želimo tačno određen ključ, npr dužine 8 karaktera sastavljen samo od cifara, potrebo je pozvati funkciju na sledeći način:


echo Generator_kljuca(8, "0123456789");

i dobijamo:

859649

Ako funkciju pozovemo sa parametrima koji su van opsega dozvoljene dužine ključa (u ovom slučaju od 1 do 32 karaktera):


echo Generator_kljuca(-5, "013456789");
echo Generator_kljuca(105, "013456789ABCDEF");


dobijamo:

9
10FF979653B1EF609EB43E4C005647D8

Funkciju možemo pozvati samo sa jednim karakterom, npr:

echo Generator_kljuca(10);  
echo Generator_kljuca(5);

dobijamo:

pvALJ9gYji
sZodD

Ako funciju pozovemo samo sa drugim parametrom, a pri tome računamo da prvi parametar ima podrazumevanu vrednost:

echo Generator_kljuca("0123456789");

nećemo dobiti ono što želimo:

pm4liTuSK21W0MueXBHwuR6kghTj0fXS

jer se deo "0123456789" računa kao prvi parametar, a to je u ovom slučaju dužina ključa. kada se string  "0123456789" pretvori u broj, dobija se broj veći od 32, pa se dućina ključa ograničava na 32 karaktera.

U tom slučaju ispravno pozivanje funkcije izgledalo ovako:


echo Generator_kljuca(10, "0123456789");


Naravno, funkcija se može izmeniti tako da neki drugi parametri budu podrazumevani, a isto tako da se promeni maksimalna dužina ključa.