.
Solución al Ejercicio: Analizar calidad de la contraseña
📋 Copiar código
import re
def analizar_calidad_contrasena(contrasena):
"""
Analiza la calidad de una contraseña basándose en criterios de seguridad.
Args:
contrasena: La cadena de texto de la contraseña.
Returns:
Una descripción de la calidad de la contraseña (str).
"""
longitud = len(contrasena)
tiene_mayuscula = bool(re.search(r'[A-Z]', contrasena))
tiene_minuscula = bool(re.search(r'[a-z]', contrasena))
tiene_numero = bool(re.search(r'[0-9]', contrasena))
tiene_simbolo = bool(re.search(r'[^a-zA-Z0-9\s]', contrasena)) # Símbolos no son alfanuméricos ni espacios
puntuacion = 0
if longitud >= 8:
puntuacion += 1
if longitud >= 12:
puntuacion += 1
if tiene_mayuscula:
puntuacion += 1
if tiene_minuscula:
puntuacion += 1
if tiene_numero:
puntuacion += 1
if tiene_simbolo:
puntuacion += 1
if puntuacion <= 1:
return "Muy débil"
elif puntuacion == 2:
return "Débil"
elif puntuacion == 3:
return "Moderada"
elif puntuacion == 4:
return "Fuerte"
else:
return "Muy fuerte"
# Ejemplos de uso
contrasena1 = "123456"
resultado1 = analizar_calidad_contrasena(contrasena1)
print(f"Calidad de '{contrasena1}': {resultado1}")
contrasena2 = "password"
resultado2 = analizar_calidad_contrasena(contrasena2)
print(f"Calidad de '{contrasena2}': {resultado2}")
contrasena3 = "Password1"
resultado3 = analizar_calidad_contrasena(contrasena3)
print(f"Calidad de '{contrasena3}': {resultado3}")
contrasena4 = "P@ssword1"
resultado4 = analizar_calidad_contrasena(contrasena4)
print(f"Calidad de '{contrasena4}': {resultado4}")
contrasena5 = "P@ssword123!"
resultado5 = analizar_calidad_contrasena(contrasena5)
print(f"Calidad de '{contrasena5}': {resultado5}")
contrasena6 = "MuyLargaYCompleja123!"
resultado6 = analizar_calidad_contrasena(contrasena6)
print(f"Calidad de '{contrasena6}': {resultado6}")
contrasena7 = ""
resultado7 = analizar_calidad_contrasena(contrasena7)
print(f"Calidad de '': {resultado7}")
Explicación del Código:
-
import re
:
- Importa el módulo
re
para
usar expresiones regulares en la detección de diferentes tipos de
caracteres.
-
def
analizar_calidad_contrasena(contrasena):
:
- Define una función llamada
analizar_calidad_contrasena
que toma la contrasena
como entrada.
-
longitud = len(contrasena)
:
- Obtiene la longitud de la contraseña.
-
tiene_mayuscula =
bool(re.search(r'[A-Z]', contrasena))
:
- Utiliza
re.search()
para
buscar al menos una letra mayúscula ([A-Z]
) en la
contraseña. bool()
convierte el resultado de la búsqueda
(un objeto de coincidencia si se encuentra, None
si no) a
un booleano (True
o False
).
-
tiene_minuscula =
bool(re.search(r'[a-z]', contrasena))
:
- Similar a la mayúscula, busca al menos
una letra minúscula (
[a-z]
).
-
tiene_numero =
bool(re.search(r'[0-9]', contrasena))
:
- Busca al menos un dígito (
[0-9]
).
-
tiene_simbolo =
bool(re.search(r'[^a-zA-Z0-9\s]', contrasena))
:
- Busca al menos un carácter que no sea
una letra (mayúscula o minúscula), un número o un espacio en blanco (
[^a-zA-Z0-9\s]
).
Esto se considera un símbolo en este contexto.
-
puntuacion = 0
:
- Inicializa una variable
puntuacion
para llevar un registro de cuántos criterios de
seguridad cumple la contraseña.
-
if longitud >= 8: puntuacion
+= 1
y if longitud >= 12: puntuacion += 1
:
- Incrementa la puntuación basada en la
longitud de la contraseña.
-
if tiene_mayuscula:
puntuacion += 1
, if tiene_minuscula:
puntuacion += 1
, if tiene_numero: puntuacion
+= 1
, if tiene_simbolo: puntuacion += 1
:
- Incrementa la puntuación por la
presencia de cada tipo de carácter requerido.
-
if puntuacion <= 1: return
"Muy débil"
y las siguientes condiciones elif
:
- Basándose en la
puntuacion
total, la función devuelve una descripción de la calidad de la
contraseña.
Ejemplos de Uso:
Los ejemplos muestran cómo la función analiza
diferentes contraseñas y proporciona una evaluación de su calidad según los
criterios definidos.