Programar un generador de contraseñas aleatorio con Javascript

JavascriptOs presento un pequeño script para generar contraseñas aleatorias para aquellos que se quedan en blanco cuando necesitan escribir una contraseña o para evitar hacerlas al azar nosotros mismos ya que siempre solemos escoger los mismos caracteres de manera inconsciente. Casi toda la gente a la que se le pregunta un número al azar entre el 1 y el 10 dicen 3 o 7 la mayor parte de las veces e igual pasa con las letras. Por eso puede ser recomendable utilizar un generador aleatorio para evitar caer en repeticiones.

En este script, las contraseñas son realmente aleatorias, lo que provoca que tengamos que apuntarlas en algún sitio con lo que se pierde seguiridad. Aunque siempre podemos recurrir a un gestor de contraseñas que las almacene mientras que la contraseña maestra sea algo que podemos recordar.

A mí me es de utilidad para dar de alta a socios de un servicio de manera masiva sin tener que pensar contraseñas.

El script está programado enteramente en Javascript y utilizando algunas funciones de la librería Prototype. La utilidad consta de una página HTML que muestra el formulario, un script de javascript que tiene el código y una hoja de estilos CSS que os podéis descargar aquí.

También ponemos el servicio a vuestra disposición en la siguiente página: ….

Comentarios sobre el código:

Las funciones para generar números aleatorios son algo limitadas en javascript. La función Math.random() devuelve un número entre 0 y 1 de 8 decimales por lo que hemos multiplicado por 100 y después redondeado para obtener números enteros del 0 al 100. Los números mayores a la longitud del array de caracteres son ignorados y se vuelve a calcular.

Tal vez se tendría que haber “barajado” el conjunto de caracteres antes de hacer la selección ya que todos los caracteres de cada grupo van juntos en el array.

Faltaría permitir al usuario definir caracteres a evitar en la contraseña. Por ejemplo, evitar que aparezcan interrogantes. Y también que para contraseñas cortas garantice que hay la misma proporción de los juegos de caracteres seleccionados.

He puesto el servicio a vuestra disposición online aquí.

Los archivos los podéis descargar aquí.

Y aquí va el código de ejemplo:

function generate_password($length, $include_alpha_l, $include_alpha_u, $include_num, $include_symbols){
//validate
$error = validation($length, $include_alpha_l, $include_alpha_u, $include_num, $include_symbols);
//if errors, exit
if ($error.length > 0){
return show_error($error);
}
//create password
var $password = keygen($length, $include_alpha_l, $include_alpha_u, $include_num, $include_symbols);

//password break lines
$password = break_lines($password);

//return password
return $password;
}
function keygen($length, $include_alpha_l, $include_alpha_u, $include_num, $include_symbols){
var $alpha_l = new Array(‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’);
var $alpha_u = new Array(‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’);
var $num = new Array(0,1,2,3,4,5,6,7,8,9);
var $symbols = new Array(‘-‘,’_’,’!’,’?’,’$’,’@’,’#’,’%’,’&’);

var $password = “”;
var $charset = new Array();

//including charsets
if ($include_alpha_l){
$alpha_l.each(function($value,$key){
$charset.push($value);
});
}
if ($include_alpha_u){
$alpha_u.each(function($value,$key){
$charset.push($value);
});
}
if ($include_num){
$num.each(function($value,$key){
$charset.push($value);
});
}
if ($include_symbols){
$symbols.each(function($value,$key){
$charset.push($value);
});
}

//random indexes
$charset.compact();
$charset_maxindex = $charset.length – 1;
$indexes = new Array();
for (var $i=0; $i < $length; $i++){
var $rand_num = Math.ceil(Math.random() * 100);
while ($rand_num > $charset_maxindex){
$rand_num = Math.ceil(Math.random() * 100);
}
$indexes.push($rand_num);
}

//get values for indexes
$indexes.each(function($value,$key){
$password += $charset[$value];
});

return $password;
}
function validation($length, $include_alpha_l, $include_alpha_u, $include_num, $include_symbols){
var $error = new Array();

//validate lenght
if ($length < 1 || $length > 200){
$error.push(“Not valid length”);
}

//validate selection
if (!$include_alpha_l && !$include_alpha_u && !$include_num && !$include_symbols){
$error.push(“Select one category at least”);
}

return $error;
}
function break_lines($password){
var $output = “”;

//get values for indexes
var $password_length = $password.length;
var $c = 0;
for (var $i=0; $i < $password_length; $i++){
$output += $password.charAt($i);
$c++;
if ($c == 10){
$output += “<wbr>”;
$c = 0;
}
}

return $output;
}
function show_error($errors){
var $output = “<ul>”;
$errors.each(function($value,$key){
$output += “<li>”+$value+”</li>”;
});
$output += “</ul>”;

return “<div class=’error’><b>Error:</b><br>”+$output+”</div>”;
}

Sin categoría

Deja una respuesta