Generar password aleatorio con longitud limitada

Aprende a generar una contraseña aleatoria sencilla y SEGURA en PHP. Rápido y sencillo.

Con el siguiente snippet de PHP podrás generar passwords (sin codificar) sencillos y seguros. En concreto voy a mostrarte una función PHP para que puedas reutilizar el código en tus desarrollos.

Puedes utilizar estas contraseñas de forma personal o para que tus aplicaciones generen passwords aleatorios y seguros para sus usuarios.

Función para generar contraseñas seguras aleatorias sencillas

function password_random( $length=6 ){
 
    //palabras y caracteres que se utilizarán para crear la contraseña
    $words = 'perro, gato, musica, amigo, aprender, php, javascript, ada, lovelace, codigo, js,';
    $words .= '!,?,.,¡,?,_,';
    $words .= 'A,B,C,D,E,J,H,K,Z,P,U,W,';
 
    // partimos las cadenas por las comas:
    $array_words = explode(',', $words);
 
    // Añade palabras mientras la contraseña es más corta de lo requerido
    $pwd = '';
    while ( strlen($pwd) < $length ){
        $r = mt_rand(0, sizeof( $array_words )-1);
        $pwd .= $array_words[$r];
    }
 
    // añade un número al final si el password es mayor que 2
    // reduce además el password a la longitud especificada en $length
    $num = mt_rand(1, 99);
    if ($length > 2){
        $pwd = substr( $pwd, 0, $length - strlen($num) ) . $num;
    } else { 
        $pwd = substr( $pwd, 0, $length );
    }
 
    return $pwd;
 
}

Pautas para generar contraseñas seguras

Esta función tiene el objetivo de obtener contraseñas sencillas, es decir, cortas y fáciles de memorizar, a la par que seguras. Aunque en gran medida la seguridad de la contraseña generada dependerá de la longitud, la combinación de caracteres diferentes, mayúsculas y minúsculas, símbolos y números logran la seguridad deseada.

Ahora depende de tí generar contraseñas más o menos seguras según la longitud de la contraseña que indiques como parámetro de entrada de la función ($length) y con los términos y caracteres que introduzcas en la variable $words.

Si lo que buscas es lograr un gran nivel de seguridad para las contraseñas que generes te recomiendo modificar la función tal que así:

  1. Utiliza un mínimo de 10 caracteres para la longitud de caracteres.
  2. En la primera fila de palabras de la variable $words introduce palabras poco comunes. Para esto puedes hacer uso de un diccionario para encontrar palabras extrañas y de poco uso.
  3. Añade, en la segunda fila de la variable $words más símbolos y caracteres que se te ocurran.

Función para generar passwords muy seguros

Ahora voy a mostrarte una versión de la primera función para generar contraseñas mucho más seguras. Voy a aplicar para este caso los consejos que te dí en el apartado anterior y realizaré algún cambio en el código que me asegure un nivel de seguridad mayor.

function password_seguro_random(){
 
    //palabras y caracteres que se utilizarán para crear la contraseña
    $words = 'azote,velociraptor,mantis,friend,srcodigo,fuente,kobold,troll,rings,murloc,testamento';
    $words2 = '.,:,;,*,_,-,!';
    $words3 = 'X,Y,Z,H,H,M,N,Q,O,P';
 
    // partimos las cadenas por las comas:
    $array_words = explode( ',', $words);
    $array_words2 = explode( ',', $words2);
    $array_words3 = explode( ',', $words3);
 
    // Añade una palabra de cada grupo
    $pwd = '';
   $pwd .= $array_words[mt_rand(0, sizeof( $array_words )-1)];
   $pwd .= $array_words2[mt_rand(0, sizeof( $array_words2 )-1)];
   $pwd .= $array_words3[mt_rand(0, sizeof( $array_words3 )-1)];
 
    // añade un número al principio si el password
    $num = mt_rand(1, 99);
    $pwd = $num . $pwd;
   
   //para mayor seguridad modifico un caracter aleatorio de la cadena por un número
   $num = mt_rand(1, 99);
   $pos_random = mt_rand(0, strlen($pwd) - 1 );
   $pwd[$pos_random] = $num;
 
    return $pwd;
 
}

En esta función he aumentado la seguridad mediante los siguientes cambios:

  1. He creado tres variables independientes para los distintos tipos de componentes de la contraseña. Haciendolo de esta forma puedo asegurarme más tarde, cuando componga la contraseña, que contiene al menos un valor por cada grupo.
  2. He añadido de forma aleatoria un valor por cada grupo de simbolos/palabras/caracteres.
  3. He añadido un numero aleatorio al principio del password.
  4. Y por último he sustituito una posición aleatoria de la cadena por un número.

Conclusión para obtener contraseñas seguras en PHP

Ambas propuestas son funciones sencillas válidas para generar contraseñas en PHP. Aunque la segunda opción es más recomendable si necesitas generar passwords robustos y dificiles de adivinar, la primera opción generará, para la mayoría de los casos, contraseñas suficientemente seguras.

Te recomiendo por lo tanto, que utilices la primera versión si la contraseña no protege ninguna clase de información bancaria o delicada, y la segunda opción para desarrollos en los que intervengan datos de susceptibles de ser robados o que impliquen peligrosidad si son sustraídos.

Recuerda siempre cifrar estas contraseñas si las almacenas en base de datos o cualquier otro soporte, ya que de nada servirá la seguridad de estas si acceden a los ficheros que las almacenan.

 

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.