none
random contraseñas c# RRS feed

  • Pregunta

  • hola buen dia tengo un problema para crear  una lista de contraseñas necesito que salgan diferentes creo el listado y me salen iguales y aveces una que otra salen diferentes este es mi metodo para crearlas no se porque las crea iguales

     public string CreateRandomPassword(int PasswordLength)
            {
                char[] chars=null;
                string _allowedChars = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";
                Byte[] randomBytes = new Byte[PasswordLength];
                chars = new char[PasswordLength];
                int allowedCharCount = _allowedChars.Length;
                Random randomObj=null;
                for (int i = 0; i < PasswordLength; i++)
                {
                    randomObj = new Random();
                    randomObj.NextBytes(randomBytes);
                    chars[i] = _allowedChars[(int)randomBytes[i] % allowedCharCount];
                }
    
                return new string(chars);
            }

    que puede estar sucediendo gracias

    martes, 25 de marzo de 2014 16:28

Todas las respuestas

  • Pon el "new Random" fuera del bucle. Si lo pones dentro, se ejecuta a cada iteración y resetea el generador de números a la misma semilla. Y si llamas varias veces muy seguidas a la rutina CreateRandomPassword, entonces la mayor parte de ellas devolverán la misma contraseña porque el generador de números aleatorios se inicializa a partir del reloj del sistema. Si haces varias llamadas tan seguidas que el reloj tiene el mismo valor, te sale la misma secuencia de números. Remedio: Construye el new Random una única vez y haz que todas las invocaciones a tu rutina usen esa misma instancia, en lugar de una nueva. Puedes usar un static dentro de la subrutina, o construir el valor fuera y pasárselo como argumento.
    martes, 25 de marzo de 2014 18:51