From 5fc339a759f24c998e5e43716be0db082adc015b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Hern=C3=A1ndez?= <76578511+albertoh88@users.noreply.github.com> Date: Thu, 21 Aug 2025 18:44:54 -0300 Subject: [PATCH] =?UTF-8?q?#2=20PASSWORD=20GENERATOR=20-=20Soluci=C3=B3n?= =?UTF-8?q?=20de=20albertoh88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Proyectos/#2 PASSWORD GENERATOR/albertoh88.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Proyectos/#2 PASSWORD GENERATOR/albertoh88.py diff --git a/Proyectos/#2 PASSWORD GENERATOR/albertoh88.py b/Proyectos/#2 PASSWORD GENERATOR/albertoh88.py new file mode 100644 index 0000000..510faa2 --- /dev/null +++ b/Proyectos/#2 PASSWORD GENERATOR/albertoh88.py @@ -0,0 +1,51 @@ +import secrets +import pyperclip as pc + +def generar_contrasena(longitud=16, usar_letras_up=True, usar_letras_down=True, + usar_numeros=True, usar_caracteres=True, copiar_portapapeles=True): + """ + Genera una contraseña segura y opcionalmente la copia al portapapeles. + + Parámetros: + - longitud: int, longitud de la contraseña (mínimo recomendado 8) + - usar_letras_up: bool, incluir letras mayúsculas + - usar_letras_down: bool, incluir letras minúsculas + - usar_numeros: bool, incluir números + - usar_caracteres: bool, incluir caracteres especiales + - copiar_portapapeles: bool, si True copia la contraseña al portapapeles + + Retorna: + - str: contraseña generada + """ + if longitud < 8: + raise ValueError("La longitud mínima recomendada es 8") + + letras_down = 'abcdefghijklmnopqrstuvwxyz' + letras_up = letras_down.upper() + numeros = '1234567890' + especiales = '#$%&()*+,-./:;<=>?@[]^_`{|}~' + + caracteres_posibles = '' + if usar_letras_up: + caracteres_posibles += letras_up + if usar_letras_down: + caracteres_posibles += letras_down + if usar_numeros: + caracteres_posibles += numeros + if usar_caracteres: + caracteres_posibles += especiales + if not caracteres_posibles: + caracteres_posibles = letras_up + letras_down + numeros + especiales + + contrasena = ''.join(secrets.choice(caracteres_posibles) for _ in range(longitud)) + + if copiar_portapapeles: + pc.copy(contrasena) + + return contrasena + + +# EJEMPLO DE USO +if __name__ == "__main__": + pwd = generar_contrasena(longitud=20, usar_caracteres=True) + print("Contraseña generada:", pwd)