3
respostas

Gerador de senha segura

import random
import string


def gerar_senha():
  caractere = random.choices(string.punctuation)[0]
  letra_maiuscula = random.choices(string.ascii_uppercase)[0]
  letra_minuscula = random.choices(string.ascii_lowercase)[0]
  numeros = random.choices(string.digits)[0]

  todos_digitos = string.punctuation + string.ascii_uppercase + string.ascii_lowercase + string.digits
  digitos_obrigatorios = [caractere, letra_maiuscula, letra_minuscula, numeros]

  senha = []

  senha.extend(digitos_obrigatorios)
  senha.extend(random.choices(todos_digitos, k = 8))
  random.shuffle(senha)

  print(f'Senha gerada: {"".join(senha)}')

gerar_senha()
3 respostas

Ei, Márcia! Tudo bem?

Muito bom seu gerador de senhas! Você garantiu que a senha tenha pelo menos um caractere de cada tipo (símbolo, maiúscula, minúscula e número), o que é ótimo para segurança.

Só uma dica: como você está usando random.choices() com k=8 para completar a senha, ela pode ficar com 12 caracteres no total (4 obrigatórios + 8 aleatórios). Se quiser controlar melhor o tamanho, pode ajustar o k ou usar random.sample().

Se quiser um desafio extra, tente deixar o tamanho da senha configurável (ex.: o usuário escolher entre 8 e 16 caracteres).

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Nathalia

Fiz algumas modificações e implementei o tamanho da senha configurável.

print('*** GERADOR DE SENHA ***\n' )

def gerar_senha(digitos):
  try:
    if digitos < 12 or digitos > 16:
      print('Erro. A senha deve conter no minimo 12 e no máximo 16 digitos.')
    else:
      caractere = random.choices(string.punctuation)[0]
      letra_maiuscula = random.choices(string.ascii_uppercase)[0]
      letra_minuscula = random.choices(string.ascii_lowercase)[0]
      numeros = random.choices(string.digits)[0]

      todos_digitos = string.punctuation + string.ascii_uppercase + string.ascii_lowercase + string.digits
      digitos_obrigatorios = [caractere, letra_maiuscula, letra_minuscula, numeros]

      senha = []

      senha.extend(digitos_obrigatorios)
      senha.extend(random.choices(todos_digitos, k = digitos - 4))
      random.shuffle(senha)

      print(f'Senha gerada: {"".join(senha)}')
      
  except ValueError:
    print('Os valor deve ser numeros')

while True:
  try:
    print('Insira o numero de digitos entre 12 e 16')
    digitos = int(input('->  '))
    break
  except ValueError:
    print('Entrada inválida. Por favor, insira um número inteiro.')


gerar_senha(digitos)

Ei, Marcia!

Perfeito, testei aqui e deu certinho!

Captura de tela mostrando a saída do código gerador de senha com limite de 12 a 16 caracteres.

Você está indo muito bem, parabéns!

Abraço e bons estudos!