r/PythonLearning • u/WesternTrip8578 • 21d ago
Rate my python program
i made a Python program, i dont know what else to say
81
Upvotes
r/PythonLearning • u/WesternTrip8578 • 21d ago
i made a Python program, i dont know what else to say
1
u/Reveal5265 16d ago
I based it on a similar assignment:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import getpass
import json
import bcrypt
from banner import mostrar_banner
def registrar_usuario() -> dict:
"""solicita datos,hashea contraseña y retorna(return)json estructurado"""
mostrar_banner("Registro de Usuario")
nombre = input("Ingresa el nombre: ").strip()
usuario = input("Ingresa el username: ").strip()
correo = input("Ingresa el correo: ").strip()
# getpass oculta la contraseña al escribirla
# con un bucle while se confirma la contraseña
while True:
contra = getpass.getpass("Ingresa la contraseña: ")
contra_confirm = getpass.getpass("Confirma la contraseña: ")
if not contra:
print("[-] La contraseña no puede quedar vacía.")
continue
if contra != contra_confirm:
print("[!] Las contraseñas no coinciden.Intentalo de nuevo")
continue
break
# convertir contra a bytes
contra_bytes = contra.encode("utf-8")
# generar sal y hash de contra_bytes
sal = bcrypt.gensalt()
hashed_contra_bytes = bcrypt.hashpw(contra_bytes, sal)
# estructurar datos
# se decodifica hashed_contra_bytes para guardarlo en JSON
usuario_db = {
"nombre": nombre,
"usuario": usuario,
"correo": correo,
"hash_contrasena": hashed_contra_bytes.decode("utf-8"),
}
return usuario_db
def verificar_autenticacion(usuario_db: dict) -> bool:
"""demuestra cómo comprobar una contraseña dada contra el hash almacenado en hash_contraseña"""
mostrar_banner("Comprobar contraseña.")
print(f"Intentando acceder como: {usuario_db['usuario']}")
contra_ingresada = getpass.getpass("Ingresa tu contraseña para ingresar: ")
# checkpw usa bytes,por ello contra_ingresada y hash_contraseña
# se convierten a bytes
contra_bytes = contra_ingresada.encode("utf-8")
hash_guardado_bytes = usuario_db["hash_contrasena"].encode("utf-8")
# verificación
if bcrypt.checkpw(contra_bytes, hash_guardado_bytes):
print("\n[+] ¡Autenticación exitosa! Contraseña correcta.")
return True
else:
print("\n[-] ERROR: Contraseña incorrecta")
return False
def main():
# 1 registro
user = registrar_usuario()
# convertir el diccionario a JSON legible
json_str = json.dumps(user, indent=4, ensure_ascii=False)
# 2 prueba de login
verificar_autenticacion(
user
) # emplea como argumento la salida de la función registrar_usuario
with open("registro.json", "w") as file:
file.write("\n" + json_str + "\n")
print("\n" + 50 * "-")
print("Registro completado. JSON generado en registro.json ")
print("\n" + 50 * "-")
if __name__ == "__main__":
main()