Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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 utilizarse 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

Generador de contraseñas aleatorias

¿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 automatizarse 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.

generador de contraseñas python

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 utilizarse 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

papers = ['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', '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 Secretos 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-generador-de-contraseñas

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

  • Genere 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á integrado 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.

alfabeto

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.ascii_letras
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 ejemplo
}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, comprobaremos 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(pwd_length):
 pwd = ''.join(secrets.choice(alphabet))

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

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

He aquí el código completo del generador de contraseñas de Python:

# importaciones necesarias
import secretos
import cadena

# definir el alfabeto
letras = cadena.ascii_letras
dígitos = cadena.dígitos
caracteres_especiales = cadena.punctuation

alphabet = letters digits special_chars

# fix password length
pwd_length = 12

# generate a password string
pwd = ''
for i in range(pwd_length):
 pwd = ''.join(secrets.choice(alphabet))

print(pwd)

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

 if (any(char in special_chars for char in pwd) and 
 sum(char in digits for char in 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ónrespectivamente. 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 secretos.elección() 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.

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder