Generar passwords accesibles con Php

Por el 13 de marzo de 2007

en: Programacion

A menudo hoy en día las aplicaciones web ofrecen la posiblidad durante el proceso de registro, de generar una clave aleatoria para los usuarios.

Sin embargo estas passwords a menudo carecen de usabilidad debido a la complicada combinación de números, letras y caracteres especiales, trataremos de explicar cómo idear una función en php que genere passwords accesibles.
Tradicionalmente la manera de generar passwords más sencilla es por medio del uso de la función rand(), concatenando letras y números de manera aleatoria.

Ejemplo de ejecución del script
Codigo Fuente del generador de passwords en PHP

Por ejemplo:

function trivial_password($len = 6)
{
$r = '';
for($i=0; $i<$len; $i++)
$r .= chr(rand(0, 25) + ord('a'));
return $r;
}
?>

Posibles resultados para esta pequeña función:
* kaaxqgsf
* rnspvfjh
* ndtfrdfj

Podriamos superarnos combinándolos con la función de encriptación md5:

function gen_md5_password($len = 6)
{
return substr(md5(rand().rand()), 0, $len);
}
?>

Generar passwords fáciles de recordar

Trataremos de crear un algoritmo que nos cree passwords que sean realmente útiles debido a que es posible memorizarla, esto lo haremos mediante la combinación de prefijos cómo (a-ante-anti-archi-auto-bi-bis-biz-biblio- etc…), sufijos () y entre medio de ambos colocaremos una cadena de caracteres sencillos de recordar.

Para generarlas tomaremos un prefijo aleatorio + una sencilla cadena (consonante + vocal) y seguido de un sufijo.

function ae_gen_password($silabas= 3, $use_prefix = false)
{

// Definimos la función a menos de que esta exista
if (!function_exists('ae_arr'))
{
// Esta función devuleve un elemento aleatorio
function ae_arr(&$arr)
{
return $arr[rand(0, sizeof($arr)-1)];
}
}

// Prefijos
$prefix = array('aero', 'anti', 'auto', 'bi', 'bio',
'cine', 'deca', 'demo', 'contra', 'eco',
'ergo', 'geo', 'hipo', 'cent', 'kilo',
'mega', 'tera', 'mini', 'nano', 'duo');

// Sufijos
$suffix = array('on', 'ion', 'ancia', 'sion', 'ia',
'dor', 'tor', 'sor', 'cion', 'acia');

// Sonidos
$vowels = array('a', 'o', 'e', 'i', 'u', 'ia', 'eo');

// Consonantes
$consonants = array('r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j',
'k', 'l', 'z', 'c', 'v', 'b', 'n', 'm', 'qu');

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

for($i=0; $i<$silabas; $i++)
{
// Selecciona una consonante al azar
$doubles = array('c', 'l', 'r');
$c = ae_arr($consonants);
if (in_array($c, $doubles)&&($i!=0)) {
if (rand(0, 4) == 1) // 20% de probabiidad
$c .= $c;
}
$password .= $c;
//

// Seleccionamos un sonido al azar
$password .= ae_arr($vowels);

if ($i == $silabas - 1) // Si el sufijo empieza con vocal
if (in_array($password_suffix[0], $vowels)) // Añadimos una consonante
$password .= ae_arr($consonants);

}

// Seleccionamos un sufijo aleatorio
$password .= $password_suffix;

return $password;
}
?>

Preparar el script para su ejecución

Unicamente nos quedaría colocarle a nuestra función una cabecera en la que se llame a l función y nos muestre los diferentes resultados, ejemplos variados:
Codigo Fuente del generador de passwords en PHP

Descarga

Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script

Resultado

2 silabas, sin prefijo

  • deojinion
  • zicidor
  • peohusor
  • queoceolancia
  • nobahon
  • fuhiador
  • denution
  • pialosia
  • soqueosion
  • leoquiabion

2 silabas, con prefijo

  • autoginiasion
  • antileozufacia
  • meganiacania
  • bionecejion
  • hipozeomivia
  • autociajedor
  • demopiazeosor
  • ergotequosor
  • biomaccusion
  • bicakedon

3 silabas, sin prefijo

  • peolegusion
  • zuvutumon
  • riagupasion
  • siaquiasocion
  • fojiakiacion
  • ciatekiajia
  • ciadipeocancia
  • beomialeojion
  • peoduviagia
  • biatusedor

3 silabas, prefijo

  • duopillorator
  • demoteodahudion
  • demomazoziquacia
  • megasagazoson
  • bihiruqueotor
  • centleovibeosia
  • antizadudedor
  • antirolleoreozia
  • decajafamacion
  • geoquianigeosor

Enlaces Relacionados

Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

Dejar un comentario