Storable Random Password

Storable Random Password

Storable Random Password

Problemi con la sicurezza delle tue applicazioni? Contattaci!

Utile per molte applicazioni e per i processi di login, gli algoritmi in grado di generare password casuale sono molto utili al fine di generare credenziali di autenticazione o verificare un processo di corrispondenza di un indirizzo mail con un account. Un occhio di riguardo è sempre rivolto alla sicurezza che le password devono mantenere per proteggere tutto ciò che sta oltre il loro utilizzo. Inutile dire quindi che la miglior password utilizzabile è quella formata dall’unione di lettere maiuscole e minuscole, numeri e caratteri speciali per una lunghezza di almeno 8 caratteri.

Trattando di software rivolti ad un pubblico di vario genere, non sempre utilizzare la password più efficiente è la risposta giusta in quanto difficilmente memorizzabile e quindi conservata in mail, fogliettini o altri dispositivi non protetti.

Per ottenere un buon connubio tra sicurezza e semplicità d’uso è necessario poter generare password casuali che presentino una facilità di lettura, quindi di memorizzazione, data dallo pseudo utilizzo di costrutti grammaticali. Unendo infatti suffissi, prefissi, vocali prese una sola volta e consonanti ripetute secondo regole grammaticali, si può ottenere una password sicuramente insensata ma facile da ricordare.

Di seguito presentiamo un breve algoritmo scritto in PHP che restituisce una password casuale facile da ricordare o come spesso chiamate le SRP Storable Random Password.

La funzione può essere personalizzata in fase di chiamata aumentando/diminuendo il numero di sillabe da utilizzare e introducendo o meno i caratteri e la quantità numerica nonché l’utilizzo dei prefissi grammaticali:

  public function gen_mem_password($syllables = 3, $use_prefix = false, $use_numbers = true,$quantity_numbers=2){
            // Define function unless it is already exists
    if (!function_exists('ae_arr'))
    {
        // This function returns random array element
        function ae_arr(&$arr)
        {
            return $arr[rand(0, sizeof($arr)-1)];
        }
    }

    // italian prefix
    $prefix = array('an',       'ana',      'ante',     'anti',     'arci',
                    'avan',     'bis',      'circom',   'cis',      'con',
                    'contra',   'contro',   'de',       'di',       'dis',
                    'eu',       'extra',    'fra',      'in',       'infra', 
                    'inter',    'intra',    'iper',     'ipo',      'luxta',    
                    'meta',     'ob',       'oltre',    'post',     'pre',      
                    'pro',      're',       'sin',      'sopra',    'sotto',    
                    'stra',     'sub',      'super',    'sur',      'tra', 
                    'trans');

    // italian suffix
    $suffix = array('accio',    'aggine',   'aggio',    'aglia',    'aio',
                    'anza',     'astro',    'ata',      'ato',      'enza',
                    'eria',     'esco',     'etto',     'ezza',     'erla', 
                    'etto',     'ezza',     'fero',     'iere',     'ino',
                    'ismo',     'ista',     'mento',    'oide',     'one', 
                    'ota',      'oto',      'otto',     'tore',     'uccio',
                    'ucolo',    'zione',    'ale',      'ario',     'ese', 
                    'evole',    'issimo',   'oso',      'oto',      'mente',
                    'archia',   'filla',    'logia',    'mania',    'teca',
                    'iatra',    'scopia'); 

    //vowel sounds 
    $vowels     = array('a', 'o', 'e', 'i', 'u', 'ou'); 

    //sound consonants 
    $consonants = array( 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'l', 'z','c', 'v', 'b', 'n', 'm','qu');
    //numbers
    $numbers    = array('1','2','3','4','5','6','7','8','9','0');

    $password           = $use_prefix?ae_arr($prefix):'';
    $password_suffix    = ae_arr($suffix);

    for($i=0; $i<$syllables; $i++)
    {
        //random consonant
        $doubles    = array('n', 'm', 't', 's','r','c','d','p','f','g','l','z','v');
        $c          = ae_arr($consonants);
        if (in_array($c, $doubles)&&($i!=0))
            if (rand(0, 2) == 1) 
                $c .= $c;
        
        $password .= $c;

        //random vowel
        $password .= ae_arr($vowels);

        if ($i == $syllables - 1) 
            if (in_array($password_suffix[0], $vowels))
                $password .= ae_arr($consonants);

    }

    // selecting random suffix
    $password .= $password_suffix;

    if($quantity_numbers>=0 && $use_numbers)
	for($j=0; $j<$quantity_numbers; $j++)
	 	$password .= ae_arr($numbers);
	
    

    return $password;
        
    }
Hai bisogno di una consulenza o assistenza?
Apri un ticket di richiesta, ti risponderò in brevissimo tempo! Chiedere non costa nulla 😉