martes, febrero 08, 2005

Generador de passwords

Hace unos dias pense en escribir un pequeño programa que me permitiera generar passwords seguros de forma aleatoria, pero me decidi a buscar primero en el google para ver si habia algo disponible en algun lenguaje, para despues yo portarlo a C#, y me encontre con esta liga.
El codigo aqui esta con algunas modificaciones que sugieren en los comentarios:

public static string CreateRandomPassword(int PasswordLength)
{
string _allowedChars = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!@$?";
Byte[] randomBytes = new Byte[PasswordLength];
char[] chars = new char[PasswordLength];
int allowedCharCount = _allowedChars.Length;

for(int i = 0;i<PasswordLength;i++)
{
Random randomObj = new Random();
randomObj.NextBytes(randomBytes);
chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
}

return new string(chars);
}

Basicamente el codigo entra en un ciclo determinado por la longitud que deseemos que el password tenga, tomando un digito aleatorio de la cadena definida como _allowedChars.
Asi que si pasamos como parametro un valor de 10, otendremos algo similar a: EMPyhDHA7f.

Creo que es importante el que nos procupemos por tener passwords seguros, de esa forma nos hace menos vulnerables a ataques de diccionario y/o furza bruta, ya que desafortunadamente la mayoria de nosotros elegimos como passwords nombres de personas que conocemos (padres, hermanos, novias, hijos, etc), fecha de algun aniversario importante, nombre de mascotas, grupos de musica, canciones, etc.; situacion que pone en grave peligro nuestra informacion.

Por medio de esta simple rutina, es posible generar passwords de la longitud deseada, asegurandonos de que sea algo sin sentido, dificil de violar. Se que algunos diran, pero, me es mas dificil recordar una cadena sin sentido que algo que tenga significado para mi; tienen razon, pero si se trata de proteger informacion confidencial, creo que vale la pena esforzarse un poco.

Es posts posteriores voy a comentar como guardar los passwords de forma segura en una base de datos, guardando unicamente el hash del password, con lo cual nos haceguramos de que se vuelve indesifrable.

Por cierto en la escuela hay una clase llamada fundamentos de programacion, la cual realmente es programacion orientada a objetos, en la cual se usa el lenguaje C# como oficial para la clase.

2 comentarios:

Anónimo dijo...

Que buena noticia esa del Tec enseñando C#.

No me cabe en la cabeza como sigue habiendo gente que usa como password el nombre de su novio(a), fecha de cumpleaños y cosas así. Excelente función esta que enseñas, muchas gracias.

Mario Alberto Chavez dijo...

Gracias por los comentarios Alfredo, el link para agregar el Blog al un lector de Feeds es:
http://mario-chavez.blogspot.com/atom.xml
El formato es atom, no rss, pero casi todos los lectores de feeds traen soporte para ambos.