Creo que una de las formas más seguras de enmascarar un password es el que se usa en GNU/Linux, no mostrar nada al ingresar el password, de esa forma no sólo se ocultan los caracteres que conforman el password, pero también se oculta el largo de la cadena, pero hay quienes prefieren ver un asterisco por cada caracter, así que eso es configurable.
Veamos la función que lee y devuelve el password:
static string LeerPassword()
{
// Caracter a mostrar en pantalla
const string mascara = "*";
ConsoleKeyInfo key;
var passwd = string.Empty;
do
{
// Leer una tecla a la vez
key = Console.ReadKey(true);
if (key.Key != ConsoleKey.Backspace && key.Key != ConsoleKey.Enter)
{
// Agrego el caracter a la cadena
passwd += key.KeyChar;
Console.Write(mascara);
}
else if (key.Key == ConsoleKey.Backspace)
{
if (mascara.Length > 0)
{
// Si la máscara se imprime hay que borrarla
Console.Write("\b \b");
}
if (!string.IsNullOrEmpty(passwd))
{
// Quitar el último caracter de la cadena
passwd = passwd.Substring(0, passwd.Length - 1);
}
}
}
while (key.Key != ConsoleKey.Enter);
return passwd;
}
Con esta simple función ya tenemos esta funcionalidad implementada, resta invocarla desde el punto donde queremos leer el password y listo!
static void Main(string[] args)
{
Console.Clear();
Console.WriteLine("Aprendiendo.Net - Enmascarar password");
Console.WriteLine();
Console.Write("Usuario: ");
var usuario = Console.ReadLine();
Console.Write("Password: ");
var passwd = LeerPassword();
/*
* Validación y resto del código
*/
Console.ReadLine();
}
Modificando el valor de la constante mascara en nuestra función LeerCodigo() podremos variar el caracter que se mostrará en pantalla al ingresar el password, incluso podemos usar un string vacío para lograr el efecto que nombraba respecto a las aplicaciones en GNU/Linux.
No hay comentarios:
Publicar un comentario