Aprenda a codificar un generador de contraseñas en Python -para generar contraseñas seguras- utilizando el módulo Python secrets.

Python es un lenguaje de programación versátil que puede utilizar en aplicaciones de automatización, desarrollo web, análisis de datos y mucho más.

Puede utilizar Python para automatizar tareas del mundo real como la supervisión de sitios web, el envío de correos electrónicos y la generación de contraseñas. En este tutorial, aprenderá a crear un generador de contraseñas seguro y aleatorio en Python.

Empecemos..

3 razones por las que debería codificar un generador de contraseñas en Python

Random-Password-Generator

¿Alguna vez se ha sentido cansado de generar contraseñas seguras y llevar un registro de ellas? He aquí por qué debería considerar codificar un generador de contraseñas en Python.

1. Automatice el proceso de generación de contraseñas

En un día normal de su vida, visitará numerosos sitios web, desde sitios de comercio electrónico hasta plataformas de aprendizaje y codificación. La mayoría de los sitios web requieren que inicie sesión con credenciales. Se trata de una tarea repetitiva que puede automatizar utilizando un script de Python.

2. Generar contraseñas seguras

Generar contraseñas seguras que cumplan las restricciones de seguridad puede ser todo un reto; las contraseñas triviales que no son seguras son susceptibles de sufrir ataques de seguridad.

python-password-generator

Puede utilizar Python para generar contraseñas seguras mediante programación. Esto le permite ejecutar el script para generar contraseñas según sea necesario, sin preocuparse de que la contraseña sea segura.

3. Añada un proyecto práctico a su cartera

Si usted es un programador principiante de Python, debe construir proyectos para perfeccionar sus habilidades y mostrar su experiencia en programación a través de un portafolio.

Además de un sencillo script de Python, puede personalizarlo aún más y publicarlo como un paquete PyPI. También puede añadir una interfaz gráfica de usuario utilizando bibliotecas como Tkinter, ¡y mucho más!

De esta forma, podrá codificar su propio generador de contraseñas -para generar y gestionar de forma segura sus contraseñas- en los distintos sitios.

El Módulo Aleatorio en Python: ¿Es suficientemente seguro?

El módulo aleatorio de Python también proporciona funciones que le permiten tomar muestras de un alfabeto y construir secuencias aparentemente aleatorias. El módulo aleatorio genera secuencias pseudoaleatorias. Analicemos qué significa pseudoaleatoriedad.

El término pseudoaleatorio significa que aunque la secuencia parezca aleatoria, en realidad es determinista.

Por lo tanto, si establece una semilla aleatoria, entonces el módulo aleatorio producirá la misma secuencia en su máquina, y para cualquiera que ejecute el mismo script con la misma semilla.

Esta es la razón por la que no debe utilizar aleatorio para aplicaciones en las que la seguridad es importante, como las contraseñas.

Entonces, ¿cuándo puede utilizar el módulo aleatorio?

Para todas las aplicaciones que no sean sensibles, puede utilizar el módulo aleatorio. Por ejemplo, hay tres conjuntos de cuestionarios, A, B y C en una clase de 40 alumnos. Le gustaría asignar un juego concreto a cada alumno de forma aleatoria.

2

En este caso, puede utilizar random.choice() dentro de una expresión de comprensión de lista, como se muestra a continuación:

import random

papeles = ['A','B','C']

q_list = [random.choice(papers) for i in range(40)]
print(q_list)
Salida de ejemplo:
['A', 'A', 'B', 'B', 'B', 'B', 'C', 'B', 'A', 'C', 'C', 'B', 
'C', 'A', 'B', 'A', 'A', 'C', 'C', 'A', 'A', 'C', 'A', 'C', 
'A', 'C', 'B', 'B', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B']

📑 Conclusión clave: Para simulaciones estadísticas, puede utilizar el módulo random; para aplicaciones sensibles, utilice el módulo secrets.

Módulo Secrets de Python: Su clave para contraseñas seguras

La Propuesta de Mejora de Python, PEP 506, aconseja a los desarrolladores utilizar el módulo secrets siempre que una secuencia deba ser criptográficamente segura, como contraseñas y tokens de seguridad.

python-secrets-password-generator

El módulo secrets the tiene varias funciones incorporadas que le permiten hacer lo siguiente:

  • Generar secuencias de números aleatorios que sean seguras para aplicaciones criptográficas.
  • Utilice funciones como choice(), randbits() y randbelow() para generar números aleatorios seguros.
  • Genere tokens para el restablecimiento de contraseñas, URL temporales y mucho más.

Cómo codificar un generador de contraseñas en Python [en 4 pasos]

Prerrequisitos: Necesita tener Python 3.6 o una versión posterior instalada para codificar junto con este tutorial. También puede ejecutar el código de ejemplo en el Editor de código Python en línea de Geekflare.

Paso 1: Importar los módulos necesarios

Como primer paso, vamos a importar el módulo secrets. Este módulo está incorporado en la biblioteca estándar de Python, por lo que puede importarlo de la siguiente manera:

import secrets

Importemos también el módulo string incorporado en Python:

import string

Paso 2: Definir el alfabeto

El siguiente paso es definir el alfabeto. El alfabeto denota el conjunto de todos los caracteres que consideraremos para la generación de contraseñas. En este caso, queremos que contenga lo siguiente: letras minúsculas y mayúsculas y caracteres especiales.

alphabet

El módulo string proporciona constantes de cadena que podemos utilizar para definir el alfabeto. Utilizaremos las siguientes constantes de cadena:

  • La constante ascii_letters es una concatenación de letras minúsculas y mayúsculas.
  • La constante dígitos es la cadena que contiene los números del 0 al 9: '0123456789'.
  • La constante de puntuación es la cadena de todos los caracteres especiales.
letras = cadena.letras_ascii
dígitos = cadena.dígitos
caracteres_especiales = cadena.puntuación

Por último, concatene las constantes de cadena anteriores para obtener el alfabeto.

alfabeto = letras dígitos caracteres_especiales

Paso 3: Fijar la longitud de la contraseña; Generar una contraseña

Almacenemos la longitud de la contraseña en la variable, pwd_length. En este ejemplo, la cadena de contraseña tiene una longitud de 12.

pwd_length = 12

▶️ Ahora, ejecute la siguiente celda de código para generar una contraseña:

pwd = ''
for i in range(pwd_length):
  pwd = ''.join(secrets.choice(alphabet))

print(pwd)
# Salida de muestra
}2:Lz,1!Gvo@

El código anterior hace lo siguiente:

  • La cadena de contraseña pwd es inicialmente una cadena vacía.
  • Sabemos que secrets.choice(alphabet) devuelve un carácter, muestreado al azar del alfabeto.
  • Utilizamos el método join() para añadir este carácter a la cadena pwd. Como no queremos ningún espacio en blanco entre los caracteres, especificamos que el separador sea ''.
  • Para repetir los pasos anteriores para generar una contraseña, utilizamos un bucle que se ejecuta durante tantas iteraciones como la longitud de la contraseña.

Paso 4: Personalice sus contraseñas en función de las restricciones

Puede personalizar la generación de contraseñas comprobando si cumple ciertas restricciones.

Por ejemplo, comprobemos si la cadena de contraseña generada de longitud 12 satisface las siguientes restricciones:

  • La cadena pwd debe contener al menos un carácter especial.
  • Debe contener al menos dos dígitos.

En el fragmento de código siguiente, puede modificar la condición que comprueba la sentencia if en función de las restricciones que defina.

while True
  pwd = ''
  for i in range(longitud_pwd):
    pwd = ''.join(secrets.choice(alphabet))

  if (any(char in caracteres_especiales for char in pwd) and 
      sum(char en digitos para char en pwd)>=2):
          break
print(pwd)
# Salida de ejemplo
lX]{`y47pM4t

En la celda de código anterior, utilizamos un bucle while infinito que se ejecuta mientras la cadena de contraseña pwd no cumpla las restricciones. Cuando la contraseña generada, pwd satisface las restricciones, salimos del bucle infinito.

Aquí está el código completo para el generador de contraseñas de Python:

# importaciones necesarias
importar secretos
importar cadena

# definir el alfabeto
letras = cadena.ascii_letras
dígitos = cadena.dígitos
caracteres_especiales = cadena.puntuación

alfabeto = letras dígitos caracteres_especiales

# fijar longitud de contraseña
longitud_contraseña = 12

# generar una cadena de contraseña
pwd = ''
for i in range(longitud_pwd):
  pwd = ''.join(secrets.choice(alphabet))

print(pwd)

# generar contraseña que cumpla las restricciones
mientras
  pwd = ''
  for i in range(longitud_pwd):
    pwd = ''.join(secrets.choice(alphabet))

  if (any(char in caracteres_especiales for char in pwd) and 
      sum(char en digitos para char en pwd)>=2):
          break
print(pwd)

Conclusión

¡Enhorabuena por haber terminado este tutorial! 🎉Ahora ha aprendido a codificar un generador de contraseñas en Python.

  • Para generar contraseñas criptográficamente seguras, debe utilizar el módulo secrets y no el módulo random.
  • Una contraseña segura debe ser lo suficientemente larga y debe ser aleatoria en el sentido de que no pueda predecirse o generarse fácilmente. Debe ser una combinación de letras mayúsculas y minúsculas, dígitos y caracteres especiales.
  • Python incorpora un módulo de cadenas que proporciona todas las letras, dígitos y caracteres especiales en las constantes ascii_letras, dígitos y puntuación, respectivamente. Utilice la sintaxis: cadena.constante para acceder a estas constantes de cadena.
  • Puede utilizar las constantes anteriores para definir un alfabeto (un conjunto de todos los caracteres) para la generación de contraseñas.
  • Una vez que haya definido un alfabeto, puede utilizar secrets.choice() para muestrear un carácter aleatorio del mismo. Para repetir esto para la longitud de la contraseña, puede utilizar un bucle for.

▶️ A continuación, lea la lista de servidores web Python a utilizar.