1 usuario conectado

Analizar calidad de la contraseña. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada analizar_calidad_contrasena que tome una cadena de texto (la contraseña) como entrada y devuelva una puntuación o una descripción de su calidad (por ejemplo, "Muy débil", "Débil", "Moderada", "Fuerte", "Muy fuerte") basada en los siguientes criterios:

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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:

  1. import re:

    • Importa el módulo re para usar expresiones regulares en la detección de diferentes tipos de caracteres.
  2. def analizar_calidad_contrasena(contrasena)::

    • Define una función llamada analizar_calidad_contrasena que toma la contrasena como entrada.
  3. longitud = len(contrasena):

    • Obtiene la longitud de la contraseña.
  4. 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).
  5. tiene_minuscula = bool(re.search(r'[a-z]', contrasena)):

    • Similar a la mayúscula, busca al menos una letra minúscula ([a-z]).
  6. tiene_numero = bool(re.search(r'[0-9]', contrasena)):

    • Busca al menos un dígito ([0-9]).
  7. 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.
  8. puntuacion = 0:

    • Inicializa una variable puntuacion para llevar un registro de cuántos criterios de seguridad cumple la contraseña.
  9. if longitud >= 8: puntuacion += 1 y if longitud >= 12: puntuacion += 1:

    • Incrementa la puntuación basada en la longitud de la contraseña.
  10. 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.
  11. 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.