Saltar al contenido

Generador de contraseñas aleatorias de C#

Si te encuentras con alguna parte que no entiendes nos puedes dejar un comentario y haremos todo lo necesario de ayudarte lo más rápido posible.

Solución:

El problema está aquí:

int[] numbers =  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' ;

Con esa declaración cada vez que se agrega un número en password se toma como número ASCII, no como valor real. Entonces estás sumando números enteros del 48 al 57, lo que hace que resulte string más tiempo de lo esperado.

por ejemplo, cuando 6 se genera como un número aleatorio, está agregando algo como: ((int)'6').ToString() en tu password variable, lo que realmente agrega 54 en vez de 6.

declarar que array como char[] y funcionará bien.

En su lugar, podría probar este pequeño método.

public static string Random(int length)

    try
    
        byte[] result = new byte[length];
        for (int index = 0; index < length; index++)
        
            result[index] = (byte)new Random().Next(33, 126);
        
        return System.Text.Encoding.ASCII.GetString(result);
     
     catch (Exception ex)
     
        throw new Exception(ex.Message, ex);
     

La única diferencia con esto es que también usará caracteres alfanuméricos, por ejemplo, puede generar cadenas como f6Dx3$5d£4hG7

eche un vistazo a www.asciitable.com y calcule el rango de caracteres que desea usar.

Para Nathan, esta es otra forma de hacerlo, si sabes exactamente qué personajes quieres...

public static string Random(int length)

    string allowed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    return new string(allowed
        .OrderBy(o => Guid.NewGuid())
        .Take(length)
        .ToArray());

Aquí hay una ligera mejora en la respuesta de series0ne. Esa respuesta dio una contraseña con el mismo carácter. (p.ej %%%%%)

        var random = new Random((int) DateTime.Now.Ticks);
        try
        
            var result = new byte[length];
            for (var index = 0; index < length; index++)
            
                result[index] = (byte) random.Next(33, 126);
            
            return System.Text.Encoding.ASCII.GetString(result);
        
        catch (Exception ex)
        
            throw new Exception(ex.Message, ex);
        

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *