Pular para o conteúdo
Bruno Dórea
Todos os posts

5 mins de leitura


Validando a Força de Senhas no IAM

Desafios de Código SQUADIO - Intermediário - 3/3


Python Data Analytics
Python Data Analytics

Descrição

Você está trabalhando para uma empresa que utiliza extensivamente os serviços da AWS, e após algumas análises a equipe de segurança identificou que algumas senhas dos usuários no IAM são fracas e podem representar um risco à segurança dos dados da empresa. Para resolver esse problema, foi solicitado que você desenvolva um programa capaz de analisar as senhas dos usuários e fornecer uma validação de força com base em critérios predefinidos.

Requisitos de segurança para a senha:

  • A senha deve ter no mínimo 8 caracteres.
  • A senha deve conter pelo menos uma letra maiúscula (A-Z).
  • A senha deve conter pelo menos uma letra minúscula (a-z).
  • A senha deve conter pelo menos um número (0-9).
  • A senha deve conter pelo menos um caractere especial, como !, @, #, $, %, etc.

Entrada

A entrada será uma única string representando a senha que precisa ser validada.

Saída

Seu programa deve retornar uma mensagem indicando se a senha fornecida pelo usuário atende aos requisitos de segurança ou não, juntamente com um feedback explicativo sobre os critérios considerados.

Exemplos

EntradaSaída
0101Sua senha e muito curta. Recomenda-se no minimo 8 caracteres.
EntradaSaída
030609saturno*Sua senha atende aos requisitos de seguranca. Parabens!
EntradaSaída
010203JupiterSua senha nao atende aos requisitos de seguranca.

Resolução

def verificar_forca_senha(senha):
    comprimento_minimo = 8
    tem_letra_maiuscula = False
    tem_letra_minuscula = False
    tem_numero = False
    tem_caractere_especial = False
 
    if len(senha) < comprimento_minimo:
        return f"Sua senha e muito curta. Recomenda-se no minimo {comprimento_minimo} caracteres."
    letra_maiuscula = ['A','B','C','D','E','F','G','H','I','J','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z']    
 
    for letra in letra_maiuscula:
        if letra in senha:
            tem_letra_maiuscula = True
        if letra.lower() in senha:
            tem_letra_minuscula = True
    sequencias_comuns = ["123456", "abcdef"]
 
    for sequencia in sequencias_comuns:
        if sequencia in senha:
            return "Sua senha contem uma sequencia comum. Tente uma senha mais complexa."
    palavras_comuns = ["password", "123456", "qwerty"]
 
    if senha in palavras_comuns:
        return "Sua senha e muito comum. Tente uma senha mais complexa."
    numeros = ['0','1','2','3','4','5','6','7','8','9']
 
    for numero in numeros:
        if numero in senha:
            tem_numero = True
    simbolos = ['~','!','@','#','$','%','^','&','*','(',')','-','+','/','?','>','<','/','|','=']
 
    for simbolo in simbolos:
        if simbolo in senha:
            tem_caractere_especial = True
 
    return 'Sua senha atende aos requisitos de seguranca. Parabens!' if len(senha) >= 8 and tem_letra_maiuscula and tem_letra_minuscula and tem_numero and tem_caractere_especial else 'Sua senha nao atende aos requisitos de seguranca.'
 
senha = input().strip()
resultado = verificar_forca_senha(senha)
 
print(resultado)

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.