安全密码生成器

打印 上一主题 下一主题

主题 963|帖子 963|积分 2889

功能实现说明

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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表