功能实现说明
1. 灵活配置
- 自定义长度:输入框支持手动输入(默认12),主动校验数字类型
- 字符组合:通过复选框实现四类字符自由组合(大写、小写、数字、符号)
- 默认值支持:初始化时已预设常用参数(长度12,全选字符类型)
2. 安全增强
- 加密安全:使用secrets模块替代random,符合NIST安全标准
- 配置校验:未选择字符类型时抛出错误,密码长度<8时弹出警告
- 防推测设计:字符选择后随机打乱序次,制止模式化组合
3. 用户体验
- 一键复制:通过pyperclip实现主动复制,支持跨平台操作
- 错误处置惩罚:对非法输入(如非数字长度)举行友好提示
- 状态反馈:只读输入框显示效果,防止误修改
功能代码
import tkinter as tk
from tkinter import ttk, messagebox
import secrets
import string
import pyperclip
class PasswordGenerator:
def __init__(self, master):
self.master = master
master.title("安全密码生成器")
master.geometry("400x300")
master.resizable(False, False)
# 控件变量初始化
self.length_var = tk.StringVar(value="12")
self.upper_var = tk.BooleanVar(value=True)
self.lower_var = tk.BooleanVar(value=True)
self.digits_var = tk.BooleanVar(value=True)
self.symbols_var = tk.BooleanVar(value=True)
self.password_var = tk.StringVar()
# 界面布局
self.create_widgets()
def create_widgets(self):
"""构建图形界面"""
# 密码长度输入
ttk.Label(self.master, text="密码长度:").grid(row=0, column=0, padx=10, pady=10, sticky="w")
length_entry = ttk.Entry(self.master, textvariable=self.length_var, width=10)
length_entry.grid(row=0, column=1, sticky="w")
# 字符类型选择
ttk.Checkbutton(self.master, text="大写字母(A-Z)", variable=self.upper_var).grid(row=1, column=0, sticky="w", padx=10)
ttk.Checkbutton(self.master, text="小写字母(a-z)", variable=self.lower_var).grid(row=2, column=0, sticky="w", padx=10)
ttk.Checkbutton(self.master, text="数字(0-9)", variable=self.digits_var).grid(row=3, column=0, sticky="w", padx=10)
ttk.Checkbutton(self.master, text="符号(!@#$)", variable=self.symbols_var).grid(row=4, column=0, sticky="w", padx=10)
# 生成按钮
ttk.Button(self.master, text="生成密码", command=self.generate_password).grid(row=5, column=0, pady=15, columnspan=2)
# 密码显示
ttk.Label(self.master, text="生成效果:").grid(row=6, column=0, padx=10, sticky="w")
result_entry = ttk.Entry(self.master, textvariable=self.password_var, state="readonly", width=25)
result_entry.grid(row=6, column=1, sticky="w")
# 复制按钮
ttk.Button(self.master, text="复制密码", command=self.copy_password).grid(row=7, column=0, pady=10, columnspan=2)
def generate_password(self):
"""核心生成逻辑"""
try:
# 参数校验
length = int(self.length_var.get())
charset = self.build_charset()
# 安全检测
if not charset:
raise ValueError("请至少选择一种字符类型")
if length < 8:
messagebox.showwarning("安全警告", "密码长度建议≥8位!")
# 密码生成
password = ''.join(secrets.choice(charset) for _ in range(length))
self.password_var.set(password)
pyperclip.copy(password) # 主动复制到剪贴板
except ValueError as e:
messagebox.showerror("参数错误", f"输入无效:{str(e)}")
except Exception as e:
messagebox.showerror("系统错误", f"生成失败:{str(e)}")
def build_charset(self):
"""构建字符集"""
charset = ""
if self.upper_var.get(): charset += string.ascii_uppercase
if self.lower_var.get(): charset += string.ascii_lowercase
if self.digits_var.get(): charset += string.digits
if self.symbols_var.get(): charset += string.punctuation
return charset
def copy_password(self):
"""复制到剪贴板"""
if self.password_var.get():
pyperclip.copy(self.password_var.get())
messagebox.showinfo("操作成功", "密码已复制到剪贴板")
if __name__ == "__main__":
root = tk.Tk()
app = PasswordGenerator(root)
root.mainloop()
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |