Como hacer un generador de contraseñas con Python
Tags: python, beginners, programming, tutorial
Published: 2024-01-12 00:09:01

Con esta explicación de cómo crear un generador de contraseñas por terminal busco que el aprendizaje sea práctico y accesible para cualquier persona que quiera aprender un poco más de **Python** ya con esto agregado podemos comenzar.

![Imagen de una terminal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lgy6t1wabus4wjdjc801.png)

> Imagen de ejemplo cuando generas una contraseña.

Para comenzar con nuestro programa debemos iniciar importando dos módulos de Python llamados: *string* y *secrets*.


![Imagen de codigo en python que muestra como se importan dos modulos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q1xfocgd74l86dj41uss.png)

En una breve explicación podemos decir que lo que hace el módulo string es proporciona varias constantes y funciones específicas para el manejo de cadenas de texto, pero nosotros solo usaremos las constantes para traer todas las letras en mayúsculas, minúsculas y también poder obtener todos los dígitos del 0 al 9 junto con los caracteres y el módulo secrecets se usa para generar números aleatorios criptográficamente fuertes de este solo vamos a usar *choise()* que devuelve un elemento elegido al azar de una secuencia no vacía.

Para poder usar string de forma cómoda, lo vamos a almacenar todo en una variable, concatenándolas de la siguiente manera.


![Imagen con codigo Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6tt92aseofnv13siwq5h.png)

*string.ascii_letters*, lo que hace es traerme todas las letras en mayúsculas y minúsculas, esto lo hace concatenado *ascii_lowercase* que tiene las letras en minúsculas y *ascii_uppercase* que trae las mayúsculas y así me evito de hacer el llamado de ambas constantes por separado.

El siguiente paso es pedirle al usuario que tan larga quiere su contraseña para luego almacenarla en una variable y convertirlo en un número entero, ya que los inputs en Python siempre son strings.


![Imagen con codigo en Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cko6jzevmrg6gzhd5crg.png)

En este paso yo decidí encapsular el código que genera la contraseña al azar en una función simplemente porque me gusta, pero si quieren pueden simplemente no encapsular su código, ya que es un programa pequeño y no tendrían problemas, ya si quieren reutilizarlo, sí sería adecuado usar la función.


![Codigo en Python de un generador de contraseñas](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hbc6gts2csp7vxwlk0z1.png)

Como podemos ver, cree una función que recibe un argumento (pwd_len) que contiene el numero indicador de la longitud que tendrá la contraseña, además contiene un ciclo *for* que se utiliza para recorrer todos los caracteres, dígitos y signos de puntuación para crear la clave dentro del rango deseado y todo es almacenado en una variable que posteriormente será retornada para así imprimirla en la terminal y que se pueda visualizar.

A pesar de que el ciclo *for* es sencillo, lo voy a explicar de una manera que quede claro lo que hace.


![Es un ciclo for programado en Python](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n2h3ugdpxx8fjfhxao0c.png)

Aqui va la explicación punto por punto.

1. Se crea la variable *pwd* que almacenara la clave. 

2. Se inicia un bucle for que se ejecutará las veces de *range(pwd_len)*. El valor es definido por el usuario y determina la longitud deseada de la contraseña y lo que está haciendo range() es utilizar el número de esa variable para determinar el rango específico en el que se ejecutara el bucle.

3. En cada iteración del bucle, se elige aleatoriamente un carácter de la cadena *ALL_CHARACTERS* utilizando la función *secrets.choice()* y .join() se utiliza para concatenar una secuencia de cadenas en una sola cadena para poder mostrarla en una sola linea. Luego, ese carácter se guarda en la variable *pwd* utilizando el operador *+=*.

4. Finalmente retornamos la variable *pwd* para ser impresa.

Solo quiero aclarar que en vez de usar el return puedes usar print() y así evitar hacer el llamado de la función para luego encerrarla en un print() para mostrar el resultado y quedando un código más feo visualmente. 

Ya solo queda ejecutar el programa y ver la salida por consola que se vería de la siguiente manera.

![Imagen representativa de una terminal/consola](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n58dlbu0cj9xn8pp9qml.png)

Como punto final, si quieren mejorar el código para practicar, pueden darle más funcionalidad, dándole la opción de elegir siquiera mayúsculas o no también si quiere números y cosas así, además de manejar los errores como por ejemplo si el usuario se equivoca y no ingresa el número, sino una letra y evitar que al suceder eso el programa te tire un error inentedible para alguien que no sabe leer lo que le dice del fallo y finalice.

Espero haber podido ayudarlos en su aprendizaje.🤗

![Imagen con fondo roza, tringulos de colores un logo de una serpiente muy colorida y con un tiulo y un subtitulo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s91psbx081ie47atpk4y.png)