Tkinter用户注册后密码通过MD5加密写入文本文件

这篇是用Tkinter做的注册界面的案例,代码里有许多验证的判断,还没有完全写完,主要实现密码加密写入字典,这里用到了之前的一篇MD5加密的方法点击查看,点注册后密码通过哈希MD5加密写入文本文件,可以看到字典中的密码是加密的,可以确保用户信息的安全
待完善的不足:用相同的用户名注册时,会记录最后一条注册的用户名和密码,这也是字典的特性,键的唯一性,但值可以任意。
解决办法:注册时遍历字典中的键,如果存在相同则不允许注册
在这里插入图片描述
上面画红线的就是密码"abc12345"的MD5值
不显示
上图是写入后的用户名和密码,因为需要转化为字典键值对的形式,所以中间用制表符Tab键分隔开,再用split方法分隔成键和值即可
在这里插入图片描述
上图是点击读出账户信息后以字典形式打印文本文件中的内容

from tkinter import *
from tkinter import messagebox
import hashlib

root = Tk()
root.title("注册窗口演示")
root.geometry("400x250")
root.resizable(0, 0)
f1 = Frame(root)
f1.pack()
l1 = Label(f1, text="用户名").grid(row=0, column=0)
l2 = Label(f1, text="输入密码").grid(row=1, column=0)
l2 = Label(f1, text="再次确认").grid(row=2, column=0)
def change():
    username.config(bg="white")
    password.config(bg="white")
    password_.config(bg="white")
    return True
username = Entry(f1,validate="key",validatecommand=change)#输入用户名
username.grid(row=0, column=1, pady=20)
password = Entry(f1,validate="key",validatecommand=change)#输入密码
password.grid(row=1, column=1)
password_ = Entry(f1,validate="key",validatecommand=change)#再次确认密码
password_.grid(row=2, column=1)

def register():
    if username.get() == "":
        username.config(bg="Crimson")
        messagebox.showerror("提示", "用户名不能为空")
    elif password.get() != password_.get():
        password.config(bg="Crimson")
        password_.config(bg="Crimson")
        password_.delete(0,END)
        messagebox.showerror("提示", "两次密码输入不一致")
    elif password.get() == password_.get():
    '''
    这里就是自定义的MD5加密,实例化对象必须写在一个函数里,
    否则加密后的同样字符串每次会出现不一样的情况
    '''
        m = hashlib.md5("欢乐海岸".encode("utf-8"))
        m.update(password.get().encode("utf-8"))
        f = open("D:\\账户信息.txt", mode="a", encoding="utf-8")
        f.write(username.get() + "\t" + m.hexdigest() + "\n")
        print(m.hexdigest())
        f.close()
        messagebox.showinfo("提示", "注册成功")
Button(f1, text="注册", width=10, command=register).grid(row=3, column=0, sticky=W, pady=5)
Button(f1, text="退出", width=10, command=root.quit).grid(row=3, column=1, sticky=E, pady=5)

def readinfo():
    f = open("D:\\账户信息.txt", mode="r", encoding="utf-8")
    information = f.readlines()

    D = {
    
    } #创建空字典,放用户名和密码

    for i in range(len(information)):
        D[information[i].split("\t")[0]] = information[i].split("\t")[1][0:-1]  #以tab键分隔,去掉末尾的换行符\n,用户名和密码加入字典中

    print(D)
    f.close()
Button(f1, text="读出账户信息", width=10, command=readinfo).grid(row=4, column=1, sticky=E, pady=5)
root.mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_51424938/article/details/111826510