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.