Python密码生成器

代码解释

1.导入库

import tkinter as tk
from tkinter import ttk
import random
import string
import pyperclip
  • tkinter:用于创建图形用户界面
  • ttktkinter的子模块,用于更现代的控件样式
  • random:用于随机选择字符生成密码
  • string:提供生成密码所需的字符集合(字母、数字、符号)
  • pyperclip:用于将生成的密码复制到剪贴板

2.创建PasswordGenerator类

class PasswordGenerator:
    def __init__(self, master):
        self.master = master
        master.title("密码生成器")
  • 定义一个类PasswordGenerator,用来处理密码生成器的逻辑
  • __init__方法初始化界面组件,并将它们添加到主窗口master

3.密码长度选择

self.length_label = ttk.Label(master, text="密码长度:")
self.length_var = tk.IntVar()
self.length_var.set(12)
self.length_scale = ttk.Scale(master, from_=8, to=32, orient=tk.HORIZONTAL, length=200, variable=self.length_var, command=self.update_length_label)
self.current_length_label = ttk.Label(master, text="12", width=3, anchor="center")
  • length_label:显示“密码长度”的标签
  • length_var:保存当前密码长度的变量,默认值为12
  • length_scale:滑动条,允许用户选择密码长度(8到32个字符)
  • current_length_label:显示当前选择的密码长度

4.特殊字符选择

self.special_char_var = tk.BooleanVar()
self.special_char_var.set(True)
self.special_char_check = ttk.Checkbutton(master, text="包含特殊字符", variable=self.special_char_var)
  • special_char_var:布尔变量,用于决定密码是否包含特殊字符,默认选中
  • special_char_check:复选框,用户可以通过它选择是否包含特殊字符

5.生成密码按钮

self.generate_button = ttk.Button(master, text="生成密码", command=self.generate_password)
  • generate_button:按钮,点击后调用generate_password方法生成密码

6.显示密码区域

self.password_var = tk.StringVar()
self.password_entry = ttk.Entry(master, textvariable=self.password_var, state='readonly', width=30)
  • password_var:保存生成密码的字符串变量
  • password_entry:只读的文本框,显示生成的密码

7.复制密码按钮

self.copy_button = ttk.Button(master, text="复制密码", command=self.copy_password)
  • copy_button:按钮,点击后调用copy_password方法将密码复制到剪贴板。

8.方法:更新密码长度显示

def update_length_label(self, value):
    self.current_length_label.config(text=str(int(float(value))))
  • update_length_label:更新显示的密码长度,使其与滑动条一致

9.方法:生成密码

def generate_password(self):
    length = self.length_var.get()
    use_special = self.special_char_var.get()
    lowercase = string.ascii_lowercase
    uppercase = string.ascii_uppercase
    digits = string.digits
    symbols = string.punctuation if use_special else ''
    password = [random.choice(lowercase), random.choice(uppercase), random.choice(digits)]
    if use_special:
        password.append(random.choice(symbols))
    all_characters = lowercase + uppercase + digits + symbols
    remaining_length = length - len(password)
    password.extend(random.choice(all_characters) for _ in range(remaining_length))
    random.shuffle(password)
    password = ''.join(password)
    self.password_var.set(password)
  •  generate_password:根据用户选择的参数生成随机密码,确保包含大写字母、小写字母和数字(如果选中,也包含特殊字符)。最终打乱密码顺序,并将其显示在界面上。

10.方法:复制密码

def copy_password(self):
    password = self.password_var.get()
    pyperclip.copy(password)
  •  copy_password:将生成的密码复制到剪贴板

11.主函数

def main():
    root = tk.Tk()
    password_generator = PasswordGenerator(root)
    root.mainloop()
  • main函数创建应用的主窗口并启动主事件循环,使应用保持运行状态

12.程序入口

if __name__ == "__main__":
    main()
  • 检查是否直接运行脚本,如果是,则调用main函数启动程序

全部代码

import tkinter as tk
from tkinter import ttk
import random
import string
import pyperclip

class PasswordGenerator:
    def __init__(self, master):
        self.master = master
        master.title("密码生成器")
        
        # 创建并放置密码长度滑动条
        self.length_label = ttk.Label(master, text="密码长度:")
        self.length_label.grid(row=0, column=0, padx=5, pady=5)
        
        self.length_var = tk.IntVar()
        self.length_var.set(12)  # 默认密码长度为12
        self.length_scale = ttk.Scale(master, from_=8, to=32, orient=tk.HORIZONTAL, 
                                      length=200, variable=self.length_var, 
                                      command=self.update_length_label)
        self.length_scale.grid(row=0, column=1, padx=5, pady=5)
        
        # 显示当前密码长度的标签,设置固定宽度
        self.current_length_label = ttk.Label(master, text="12", width=3, anchor="center")
        self.current_length_label.grid(row=0, column=2, padx=5, pady=5)
        
        # 创建特殊字符选择框
        self.special_char_var = tk.BooleanVar()
        self.special_char_var.set(True)  # 默认包含特殊字符
        self.special_char_check = ttk.Checkbutton(master, text="包含特殊字符", 
                                                  variable=self.special_char_var)
        self.special_char_check.grid(row=1, column=0, columnspan=3, pady=5)
        
        # 创建生成密码按钮
        self.generate_button = ttk.Button(master, text="生成密码", command=self.generate_password)
        self.generate_button.grid(row=2, column=0, columnspan=3, pady=10)
        
        # 创建密码显示区域
        self.password_var = tk.StringVar()
        self.password_entry = ttk.Entry(master, textvariable=self.password_var, state='readonly', width=30)
        self.password_entry.grid(row=3, column=0, columnspan=3, padx=5, pady=5)
        
        # 创建复制按钮
        self.copy_button = ttk.Button(master, text="复制密码", command=self.copy_password)
        self.copy_button.grid(row=4, column=0, columnspan=3, pady=10)

    def update_length_label(self, value):
        # 更新显示当前密码长度的标签
        self.current_length_label.config(text=str(int(float(value))))

    def generate_password(self):
        length = self.length_var.get()
        use_special = self.special_char_var.get()
        
        # 定义字符集
        lowercase = string.ascii_lowercase
        uppercase = string.ascii_uppercase
        digits = string.digits
        symbols = string.punctuation if use_special else ''
        
        # 确保密码包含每种字符
        password = [
            random.choice(lowercase),
            random.choice(uppercase),
            random.choice(digits)
        ]
        if use_special:
            password.append(random.choice(symbols))
        
        # 填充剩余长度
        all_characters = lowercase + uppercase + digits + symbols
        remaining_length = length - len(password)
        password.extend(random.choice(all_characters) for _ in range(remaining_length))
        
        # 打乱密码字符顺序
        random.shuffle(password)
        
        # 转换为字符串
        password = ''.join(password)
        
        self.password_var.set(password)

    def copy_password(self):
        password = self.password_var.get()
        pyperclip.copy(password)

def main():
    root = tk.Tk()
    password_generator = PasswordGenerator(root)
    root.mainloop()

if __name__ == "__main__":
    main()

制作不易,点个关注再走吧 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python密码字典生成器可以通过Python编写一个脚本来实现。以下是一个简单的示例: ```python import itertools import argparse def generate_passwords(template_file, keywords, special_chars, output_file): # 读取模板文件 with open(template_file, 'r') as f: template = f.read().strip() # 生成关键字排列组合 keyword_combinations = [] for i in range(1, len(keywords) + 1): keyword_combinations += itertools.permutations(keywords, i) # 生成密码 passwords = [] for combination in keyword_combinations: password = template for keyword in combination: password = password.replace('{}', keyword, 1) passwords.append(password) # 添加特殊字符 if special_chars: passwords_with_special_chars = [] for password in passwords: for char_combination in itertools.product(special_chars, repeat=len(password)): password_with_special_chars = '' for i in range(len(password)): password_with_special_chars += password[i] + char_combination[i] passwords_with_special_chars.append(password_with_special_chars) passwords = passwords_with_special_chars # 写入文件 with open(output_file, 'w') as f: for password in passwords: f.write(password + '\n') if __name__ == '__main__': parser = argparse.ArgumentParser(description='Generate customized password dictionary.') parser.add_argument('-t', '--template', required=True, help='Template file path.') parser.add_argument('-k', '--keywords', required=True, help='Keywords separated by comma.') parser.add_argument('-s', '--special-chars', help='Special characters separated by comma.') parser.add_argument('-o', '--output', required=True, help='Output file path.') args = parser.parse_args() keywords = args.keywords.split(',') special_chars = args.special_chars.split(',') if args.special_chars else None generate_passwords(args.template, keywords, special_chars, args.output) ``` 使用方法: 1. 创建一个模板文件,例如`template.txt`,其中包含一个或多个`{}`占位符,用于替换关键字。 2. 运行以下命令生成密码字典: ``` python password_generator.py -t template.txt -k keyword1,keyword2,keyword3 -s !,@,#,$ -o passwords.txt ``` 其中,`-t`指定模板文件路径,`-k`指定关键字序列,以逗号分隔开,`-s`指定一些特殊符号,以逗号分隔开,`-o`指定输出后的文件名。 如果不需要特殊字符,可以省略`-s`参数。 生成的密码字典将保存在`passwords.txt`文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值