Creando generador de contraseñas con Python

Autor: | Última modificación: 3 de noviembre de 2022 | Tiempo de Lectura: 5 minutos
Temas en este post:

¿Sabes cómo crear un generador de contraseñas con Python? Describimos la creación de un programa capaz de generar, de modo automático, una contraseña, con un nivel aceptable de seguridad, para nuestras cuentas de Internet.

He aquí un ejemplo del modo en que va a funcionar nuestro programa una vez creado:

generador de contraseñas con Python

Nuestro generador de contraseñas con Python

Como es habitual, lo primero que haremos será importar los módulos que vamos a emplear en la creación de nuestro programa, que en nuestro caso serán: “subprocess”, “random” (para generación de aleatoriedad), “string” (el cual nos permitirá disponer de los métodos necesarios para combinar caracteres alfanuméricos) y “VALID” (este último de creación propia).

Ahora, daremos la opción a nuestro usuario de escoger la longitud (número de caracteres) de nuestra futura contraseña. Esta longitud quedará representada por la variable «longitud». Para asegurarnos de que solo sevpueda introducir un valor numérico entero, usaremos la función «OKI» que aplicaremos sobre el «input»(dicha función, en mi caso se encuentra alojada en «VALID.py»):

Creando generador de contraseñas con Python 1

A continuación crearemos, de modo aleatorio, nuestra contraseña (variable «contraseña») la cual, se originará a partir de los caracteres alfanuméricos disponibles en nuestra variable «caract» (resultado de la suma de los caracteres alfabéticos contenidos en «string.ascii_letters» y los caracteres numéricos en formato cadena contenidos en «string.digits») los cuales, al final, uniremos (mediante la función «join») empleando el espacio («») como criterio de unión. Esta operación de extracción de caracteres para su posterior unión la realizaremos tantas veces como sea el número de la longitud de nuestra futura contraseña («for i in range longitud:»).

Creando generador de contraseñas con Python 2

Con esto ya tendríamos un programa (en este caso, una funcionalidad) capaz de crear de modo automático una contraseña, con el número de caracteres que le especificamos.

Pero como sabemos, en muchas páginas de Internet, cuando tenemos que crear una contraseña, por motivos de seguridad, se nos piden contraseñas que reúnen ciertas requisitos como puede ser un número mínimo de minúsculas, mayúsculas o caracteres numéricos y símbolos. Es por ello que vamos a introducir algunas variaciones en nuestro código.

La primera de tales variaciones es la consistente en establecer las variables «minus», «mayus» y «numeros», que se corresponden con el número mínimo de caracteres en minúscula, mayúsculas y caracteres numéricos, que queremos que tenga nuestra contraseña (a cada uno de los cuales, volvemos a aplicar la función «OKI»).

El siguiente paso que daremos para crear el generador de contraseñas con Python, será crear un ciclo que en cada ejecución, genere una contraseña con la longitud especificada y que, a su vez, compruebe si dicha contraseña cumple los requisitos pedidos por el usuario mediante las variables «minus», «mayus» y «numeros», que, como recordaremos, se corresponden con el número mínimo de minúsculas, mayúsculas y caracteres numéricos, previamente especificados por el usuario:

Creando generador de contraseñas con Python 3

Así, lo que hemos hecho, ha sido utilizar un «while», en el que, en primer lugar, se genera una contraseña (variable «contraseña») a partir de los caracteres contenidos en «caract» (como hacíamos antes) para, a continuación, comprobar si el número de caracteres en minúscula («lower») es mayor o igual al número mínimo pedido para «minus» («>=minus») y que el numero de caracteres en mayúsculas («upper») es mayor o igual a «mayus» («>=mayus») y si el número de caracteres numéricos («digit») es mayor o igual a «numeros» («>=numeros»). Solo cuando, en la correspondiente ejecución del ciclo, la contraseña generada cumpla estos 3 requisitos, el ciclo se interrumpirá (mediante la sentencia «break») y el programa nos mostrará nuestra contraseña («print(«SU CONTRASEÑA: «,contraseña»).

A modo de ejemplo, para ver como se ejecuta esta parte del código (me refiero al ciclo de creación/comprobación de contraseñas) vamos a insertar un «print» en dicho ciclo para ver como este va generando dichas contraseñas hasta encontrar una que cumpla los requisitos pedidos con las variables «minus», «mayus» y «numeros»:

Creando generador de contraseñas con Python 4

Tras lo cual ejecutamos, en el «shell», el programa, especificándole que queremos una contraseña de 10 caracteres que tenga al menos 2 minúsculas, 2 mayúsculas y 4 números:

Creando generador de contraseñas con Python 5

Como se puede ver, para encontrar la contraseña adecuada a lo que el usuario pide, el ciclo se ha tenido que ejecutar 6 veces, generando 5 contraseñas no válidas hasta llegar a la sexta (si válida) que es la que finalmente nos ha mostrado como resultado (en principio este proceso puede parecer lento, pero no hemos de olvidar que este se produce en milésimas de segundo, con lo que el resultado es, prácticamente, instantáneo).

No obstante, nuestro programa sigue teniendo un defecto importante, el cual se encuentra relacionado con la combinación entre los mínimos pedidos y la longitud solicitada para la contraseña. Esto se entiende si imaginamos el supuesto en el que nuestro usuario pretende crear una contraseña de tan solo 5 caracteres, pidiendo a su vez, que al menos 2 sean minúsculas, 2 mayúsculas y 2 numéricos. En este caso a la contraseña pedida le faltaría siempre un carácter para poder cumplir los mínimos pedidos. De modo que si volviéramos a hacer el experimento anterior, veríamos como el ciclo empezaría a generar una lista infinita de contraseñas sin llegar nunca a ningún resultado final (ya que con esa longitud sería imposible encontrar una contraseña con los mínimos pedidos). De esto se deduce la necesidad de que nuestra longitud este acorde con dichos mínimos.

Para ello, antes de ir al paso final de nuestro tutorial sobre cómo crear un generador de contraseñas con Python, procuraremos hacer que el programa, para la longitud, compruebe si esta es mayor o igual a la suma de los mínimos pedidos (la cual será representada en la variable «suma». De modo que mientras que la longitud pedida sea menor a dicha cifra («while longitud<suma:») nos aparezca un mensaje alertándonos de que la longitud no es adecuada, permitiéndonos, a su vez, introducir un nuevo valor para dicha longitud:

Creando generador de contraseñas con Python 6

Ejemplo de mensaje de error, con rectificación posterior:

Creando generador de contraseñas con Python 7

Finalmente, tal y como se aprecia en el código final, crearemos una variable (de nombre “conti”) mediante la cual, preguntaremos al usuario si quiere continuar usando el programa. Ante lo que este solo deberá contestar “s” (contestación afirmativa) o “n” (contestación negativa). Para asegurar que solo se introduce una de tales contestaciones haremos uso de la función “ns” que se encuentra en el módulo “VALID” y cuya sintaxis sería la que sigue:

keepcoding-python

Podéis ver el código completo del programa en el repositorio de Github al que me remito en el siguiente enlace:

Antonio Alfonso Martínez

Antonio Alfonso Martínez

Programador y desarrollador autodidacta. Semanalmente publica en el blog El programador Chapuzas (wordpress) y también colaboro en las páginas “Código Comentado” y “Algoritmos MathPy” de Facebook.

Si tienes algo que deseas compartir o quieres formar parte de KeepCoding, escríbenos a [email protected].

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.