It happens that to make my program safer, I ask for a password at the beginning of the program, and this password is also customizable (using the ConfigParser library), to make it even more secure, the config.ini file is encrypted using the Pydes library , from this, the enter method is used, which first thing is to obtain the password that the user entered, the second is to decrypt the file config.ini to be able to read it, the password section is obtained, and then compare what that the user introduced with what is in the password section of config.ini, if the password is incorrect, a message is displayed, if it is correct, the program is accessed, however, when testing it, it happens that, despite typing the password correctly, I keep pulling that the password is incorrect
#Python 3.5
#Office Database v2.0
#Etapa: Desarrollo
#Desarrollador: Cesar Eduardo Cuevas Garza
from tkinter import *
from pyDes import des
from tkinter import messagebox
import configparser
import time
#from dependencies import delete as d
global contraseña_encriptado
def encriptar(contraseña, fichero):
f = open(fichero, "rb+")
d = f.read()
f.close()
k = des(contraseña)
d = k.encrypt(d, " ")
f = open(fichero, "wb+")
f.write(d)
f.close()
return True
def desencriptar(contraseña, fichero):
f = open(fichero, "rb+")
d = f.read()
f.close()
k = des(contraseña)
d = k.decrypt(d, " ")
f = open(fichero, "wb+")
f.write(d)
f.close()
return True
try:
config = configparser.ConfigParser()
config.read("config.ini")
config.get("Software", "contraseña")
encriptar("#19UmPV@", "config.ini")
except:
desencriptar("#19UmPV@", "config.ini")
encriptar("#19UmPV@", "config.ini")
def main():
ventana_main = Tk()
ventana.destroy()
ventana_main.geometry("800x800+400+100")
opcion = StringVar(ventana_main)
bienvenido_label = Label(ventana_main, text = "Bienvenido, Selecciona Una Opcion:", font = ("Helvetica", 24)).place(x = 150, y = 40)
opciones_spinbox = Spinbox(ventana_main, values = ("Añadir un usuario", "Hola"), textvariable = opcion, width = 60, font = ("Helvetica", 12, "bold"), state = "readonly").place(x = 150, y = 120)
def entrar(x):
desencriptar("#19UmPV@", "config.ini")
config = configparser.ConfigParser()
config.read("config.ini")
final_pass = config.get("Software", "contraseña")
if str(x) == str(final_pass):
encriptar("#19UmPV@", "config.ini")
main()
else:
encriptar("#19UmPV@", "config.ini")
messagebox.showerror("Error", "Contraseña Incorrecta")
ventana = Tk()
ventana.title("Bienvenido")
ventana.geometry("300x300+600+250")
ventana.resizable(width=False, height=False)
fondo = "#2F4F4F"
letras = "#FFF"
ventana.configure(background = fondo)
try:
archivo = open("datos.csv")
config = open("config.ini")
except:
messagebox.showwarning("Error", "Falta algun archivo!")
x = messagebox.askquestion("Setup", "¿Crear Archivos?")
if x == "yes":
archivo = open("datos.csv", "a")
config = open("config.ini", "a")
archivo.close()
config.close()
archivo = open("datos.csv")
config = open("config.ini")
longitud = 0
for z in archivo:
longitud = longitud + len(z)
archivo.close()
if longitud==0:
archivo = open("datos.csv", "a")
archivo.write("ID,Nombre,Apellidos,Equipo de Trabajo,Puntos Avante\n")
archivo.close()
longitud = 0
for z in config:
longitud = longitud + len(z)
if longitud == 0:
config = open("config.ini", "a")
config.write("[Software]\nusuario = Root\ncontraseña = password")
config.close()
Config = configparser.ConfigParser()
Config.read("config.ini")
messagebox.showinfo("Setup", "Archivos Creados Exitosamente")
encriptar("#19UmPV@" , "config.ini")
encriptar("#19UmPV@", "datos.csv")
else:
messagebox.showwarning("Cerrando Programa", "Se necesitan los archivos para avanzar")
exit()
contraseña_entrar = StringVar()
pass_etiqueta = Label(ventana , text = "¡Introduce La Contraseña!", bg = fondo, fg = letras, font= ("Helvetica", 16)).place(x = 30, y = 10)
pass_entry = Entry(ventana, textvariable = contraseña_entrar).place(x = 60, y = 60)
pass_boton = Button(ventana, text= "Entrar!", command = lambda: entrar(contraseña_entrar)).place(x = 60, y = 90)
ventana.mainloop()