一、实验名称
散列算法 MD5 的应用
二、实验目的及要求
通过编程实现 MD5 算法应用于系统登录口令的安全认证,加深对 MD5 算法及其应用的
了解
三、实验环境
Windows10, Pycharm
四、实验设计
内容要求:
- 实验步骤
设计一个模拟的系统用户安全登录的界面程序,采用 MD5 算法实现用户登录口令的安全认证。程序具有注册和登录两个功能,用户注册功能提示用户输入用户名和口令,实现用户名和用户口令的 MD5 散列值的一一对应。用户登录功能,提示用户输入用户名和口令,用户输入正确口令后,显示其 MD5 散列值,并提示用户合法;否则给出非法用户提示。
2、调试过程及实验结果
注册:
登录:
密码输入错误登录:
3、总结
本次实验主要学习了散列算法MD5的应用,通过实验了解了MD5算法的原理和实现过程,掌握了MD5算法的使用方法和注意事项。
在实验中,我们使用了Python编程语言来实现MD5算法,并对字符串进行加密和解密操作。通过实验,我们发现MD5算法具有以下特点:
MD5算法是一种单向散列算法,可以将任意长度的数据转换成固定长度的摘要信息。
MD5算法具有不可逆性,即无法通过摘要信息反推出原始数据。
MD5算法具有高度的散列性,即对于不同的输入数据,其生成的摘要信息是不同的。
MD5算法具有较高的安全性,但是随着计算机技术的发展,其安全性也在逐渐降低。
总之,本次实验让我们更深入地了解了散列算法MD5的应用,对信息安全有了更深刻的认识。同时,也提醒我们在实际应用中要注意数据的安全性,采取合适的加密措施来保护数据的安全。
import hashlib
import tkinter as tk
# 定义一个字典用于存储注册的用户信息
users = {}
# 注册用户
def register():
username = username_entry.get()
password = password_entry.get()
# 对密码进行 MD5 散列
password_md5 = hashlib.md5(password.encode()).hexdigest()
users[username] = password_md5
result_label.config(fg="green", text="注册成功!")
# 用户登录
def login():
username = username_entry.get()
password = password_entry.get()
# 对密码进行 MD5 散列
password_md5 = hashlib.md5(password.encode()).hexdigest()
if username in users and users[username] == password_md5:
result_label.config(fg="green", text="登录成功!")
password_md5_label.config(text="MD5 散列值:" + password_md5)
else:
result_label.config(fg="red", text="用户名或密码错误!")
password_md5_label.config(text="")
# 创建主窗口
root = tk.Tk()
root.title("用户登录")
# 创建用户名标签和输入框
username_label = tk.Label(root, text="用户名:")
username_label.grid(row=0, column=0)
username_entry = tk.Entry(root)
username_entry.grid(row=0, column=1)
# 创建密码标签和输入框
password_label = tk.Label(root, text="密码:")
password_label.grid(row=1, column=0)
password_entry = tk.Entry(root, show="*")
password_entry.grid(row=1, column=1)
# 创建注册按钮和登录按钮
register_button = tk.Button(root, text="注册", command=register)
register_button.grid(row=2, column=0)
login_button = tk.Button(root, text="登录", command=login)
login_button.grid(row=2, column=1)
# 创建结果标签和密码 MD5 散列值标签
result_label = tk.Label(root, text="")
result_label.grid(row=3, column=0, columnspan=2)
password_md5_label = tk.Label(root, text="")
password_md5_label.grid(row=4, column=0, columnspan=2)
# 运行主窗口
root.mainloop()