玖叶教程网

前端编程开发入门

用python写一个密码生成器

以前没有用keepass的时候,每次的密码都要自己去随机按键盘,后来有了keepass就方便了,但最近还是想自己搞一个简单的密码生成器试试:

# 有界面,可以复制密码,每次必须包含大写、小写、数字和符号,默认密码长度12位
import tkinter as tk
import random
import string
import pyperclip

DEFAULT_PASSWORD_LENGTH = 12


def generate_password():
    try:
        password_length = int(length_entry.get())
    except ValueError:
        password_length = DEFAULT_PASSWORD_LENGTH

    if password_length <= 0:
        password_length = DEFAULT_PASSWORD_LENGTH

    # 定义包含大写字母、小写字母、数字和符号的字符集合
    characters = string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation

    # 确保至少包含一个大写字母、一个小写字母、一个数字和一个符号
    password = random.choice(string.ascii_uppercase) + \
               random.choice(string.ascii_lowercase) + \
               random.choice(string.digits) + \
               random.choice(string.punctuation) + \
               ''.join(random.choice(characters) for _ in range(password_length - 4))

    # 将密码字符串转换为列表并进行乱序
    password_list = list(password)
    random.shuffle(password_list)
    password = ''.join(password_list)

    password_var.set(password)


def copy_password():
    pyperclip.copy(password_var.get())


# 创建主窗口
root = tk.Tk()
root.title("密码生成器")

# 创建控件
length_label = tk.Label(root, text="密码长度:")
length_label.grid(row=0, column=0, padx=5, pady=5)

default_length = tk.StringVar(value="默认" + str(DEFAULT_PASSWORD_LENGTH) + "位")
length_entry = tk.Entry(root, textvariable=default_length)
length_entry.grid(row=0, column=1, padx=5, pady=5)
length_entry.config(fg='grey')


def on_entry_click(event):
    if length_entry.get() == "默认" + str(DEFAULT_PASSWORD_LENGTH) + "位":
        length_entry.delete(0, "end")
        length_entry.insert(0, "")
        length_entry.config(fg='black')


def on_focus_out(event):
    if length_entry.get() == "":
        length_entry.insert(0, "默认" + str(DEFAULT_PASSWORD_LENGTH) + "位")
        length_entry.config(fg='grey')


length_entry.bind('<FocusIn>', on_entry_click)
length_entry.bind('<FocusOut>', on_focus_out)

generate_button = tk.Button(root, text="生成密码", command=generate_password)
generate_button.grid(row=1, column=0, columnspan=2, padx=5, pady=5, sticky="we")

password_var = tk.StringVar()
password_label = tk.Label(root, textvariable=password_var, wraplength=300)
password_label.grid(row=2, column=0, columnspan=2, padx=5, pady=5)

copy_button = tk.Button(root, text="复制密码", command=copy_password)
copy_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5, sticky="we")

# 运行主循环
root.mainloop()

#python#

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言