详解如何通过Python制作一个密码生成器
作者:winfredzhang 发布时间:2023-11-24 10:36:43
原由
定期更换密码是一种非常重要的安全措施,这种做法可以有效地保护你的账户和个人信息不受黑客和网络攻击者的侵害。
密码泄露是一个非常普遍的问题,许多人的账户和密码经常会被泄露出来,导致个人信息被盗用、金融损失、恶意软件感染等严重问题。定期更换密码可以减少这种风险,因为即使你的密码被盗了,攻击者也只能获得你的信息和权限一段时间。
此外,定期更换密码还可以提高你的账户安全性,因为许多人使用相同的密码和用户名登录多个网站和服务,如果一个密码被盗,黑客可以轻松地访问其他帐户。通过定期更换密码,可以确保你的密码不会被黑客用于其他服务,从而提高你的安全性。
编程思路
首先导入了 Python 的 tkinter 模块和之前编写的生成随机密码的函数。然后,定义了一个 generate_callback 回调函数,用于生成随机密码,并将其显示在密码编辑框中。
在 generate_callback 函数中,首先使用 password_length_var.get() 获取用户输入的密码长度,然后调用之前编写的 generate_password 函数生成密码。最后,使用 password_edit.delete() 和 password_edit.insert() 方法将密码显示在密码编辑框中。
在主程序中,使用 tk.Label 和 tk.Entry 创建标签和输入框,用于输入密码长度。然后,使用 tk.Button 创建生成按钮,并将 generate_callback 函数指定为回调函数。接着,使用 tk.Label 和 tk.Entry 创建密码编辑框,用于显示生成的密码。
最后,使用 tk.mainloop() 进入主事件循环,等待用户操作。当用户点击生成按钮时,程序将自动调用 generate_callback 函数生成随机密码,并将其显示在密码编辑框中。
代码
import tkinter as tk
import random
import string
def generate_password(length):
# 可以自定义密码中包含的字符集
characters = string.ascii_letters + string.digits
# 生成指定长度的随机密码
password = ''.join(random.choice(characters) for i in range(length))
return password
def generate_callback():
# 获取密码长度
password_length = int(password_length_var.get())
# 生成密码
password = generate_password(password_length)
# 将密码显示在编辑框中
password_edit.delete(0, tk.END)
password_edit.insert(0, password)
# 创建主窗口
root = tk.Tk()
root.title("生成随机密码")
# 创建标签和输入框,用于输入密码长度
password_length_label = tk.Label(root, text="请输入要生成的密码长度:")
password_length_label.grid(row=0, column=0, padx=5, pady=5)
password_length_var = tk.StringVar()
password_length_edit = tk.Entry(root, textvariable=password_length_var)
password_length_edit.grid(row=0, column=1, padx=5, pady=5)
# 创建生成按钮
generate_button = tk.Button(root, text="生成密码", command=generate_callback)
generate_button.grid(row=1, column=0, padx=5, pady=5)
# 创建密码编辑框,用于显示生成的密码
password_edit_label = tk.Label(root, text="生成的密码:")
password_edit_label.grid(row=2, column=0, padx=5, pady=5)
password_edit = tk.Entry(root)
password_edit.grid(row=2, column=1, padx=5, pady=5)
# 进入主事件循环
root.mainloop()
效果如下
补充
除了上文的方法,小白还为大家准备了其他的Python实现密码生成的方法,需要的可以参考一下
python 随机生成密码
# 这里主要是以ascii码去表示上诉的字符串
#表示26个字母,查询ascci码的表示是65, 90,但是我是使用range表示,左闭右开,步长为一
import random
total_len = 12 #密码总长为12
daxiezimu = range(65,91, 1) # 定义26个大写字母列表
xiaoxiezimu = range(97, 123, 1) # 定义26个大写字母列表
shuzi = range(48, 58, 1) # 定义0-9个数字
teshuzifu = [64, 63, 96] # 定义特殊字符@ ? \ 特殊字符就给了一个列表,因为assci码没有连续的
random3_list = [daxiezimu, xiaoxiezimu, teshuzifu]
for i in random3_list: # 循环需要随机生成0-3位的大小写字母跟特殊字符
for j in range(random.randint(1, 3)): # 随机循环0-3的次数
res.append(chr(random.choice(i))) # chr将ascii码转为字符 random.choice(i)随机从i中取出一个数
x = total_len - len(res) #需要生成x位长度的数字
for k in range(x): #需要生成多少位的数字就循环几次
res.append(chr(random.choice(shuzi)))
random.shuffle(res) # random.shuffle(列表对象) 用来打乱列表
Python实现密码生成器
import random
import string
from gooey import GooeyParser,Gooey
@Gooey(encoding='utf8',program_name='强密码生成器',program_description='用于生成包含大小写字母、数字、特殊符号的强密码',optional_cols=1)
def stronge_password():
parse = GooeyParser(description='用于生成包含大小写字母、数字、特殊符号的强密码')
parse.add_argument('数量',widget='TextField')
parse.add_argument('长度',widget='TextField')
parse.add_argument('数字',widget='Dropdown',choices={"是":1,"否":0},default='是')
parse.add_argument('大写字母',widget='Dropdown',choices={"是":1,"否":0},default='否')
parse.add_argument('小写字母',widget='Dropdown',choices={"是":1,"否":0},default='否')
parse.add_argument('特殊符号',widget='Dropdown',choices={"是":1,"否":0},default='否')
parse.add_argument('去除词',widget='TextField',default='None')
args = parse.parse_args()
if args.数字 == "是":
digits = list(string.digits.strip())
else:
digits = []
if args.大写字母:
upper = list(string.ascii_uppercase)
else:
upper = []
if args.小写字母:
lower = list(string.ascii_lowercase)
else:
lower = []
if args.特殊符号:
symbol = list("~!@#$%^&*()_+{}[]/?")
else:
symbol = []
if args.去除词 != 'None':
stop_word = list(args.去除词.strip())
else:
stop_word = []
letter_list = digits + upper + lower + symbol
for item in stop_word:
if item in letter_list:
letter_list.remove(item)
for i in range(int(args.数量)):
result = ''.join([random.choice(letter_list) for i in range(int(args.长度))])
print(result)
if __name__ == '__main__':
stronge_password()
来源:https://blog.csdn.net/winniezhang/article/details/129242154
猜你喜欢
- blankzheng的blog:http://www.planabc.net/1、使用fieldset和legend标签在form中,我们经
- 本文实例讲述了CodeIgniter分页类pagination使用方法。分享给大家供大家参考,具体如下:controller控制器(appl
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。
- 当你碰到下面的asp错误提示时,说明你asp运行脚本超时了! Active Serv
- 最近的项目涉及到很多表单的制作,特别是复选框(checkbox)和单选框(radio)。但是在前端开发过程中发现,单(复)选框和它们后面的提
- 您可以将SQL Server 数据库引擎升级到 SQL Server 2008。SQL Server 安装程序只需最少的用户干预就可升级 S
- 网上找了很多。貌似没什么好的解决办法。自己参考了下。把它直接整成一条SQL语句了。不过字段的格式只允许前面或者后面有字符。中间不允许出现字符
- 在oracle中有很多关于日期的函数,如:1、add_months()用于从一个日期值增加或减少一些月份date_value:=add_mo
- 1、Export/Import的用处 Oracle Export/Import工具用于在数据库之间传递数据。 Export从数据库中导出数据
- 在程序调试中,有时候需要知道有多少Session变量在使用,她们的值如何?由于Session对象提供一个称为Contents的集合(Coll
- 研究(2)中讨论了栅格系统的基础知识。这一篇将集中探讨栅格系统的粒度问题。(注:如非特别指明,栅格系统均指24列960栅格系统)淘宝的首页(
- 背景:不久前,设计实现了京东api的功能,发现如果换了其它快递再重新设计,岂不是会浪费太多的时间,所以选个第三方提供的快递API是最为合理的
- 绘制一个线框图是你在制作一个网站前必须要经历的过程。线框图能够帮助你合理的组织并简化你内容和元素,是网站内容布局的基本视觉表现方式,是网站开
- 1.SQL Server 2005中的存储过程并发问题问:我在SQL Server2005中遇到了并发问题。我持有车票的公共汽车上有一些空闲
- 搞了一上午,头都大了!最终解决问题。其实这问题老早就遇上了,但是比较懒,三下两下没整好便推开了搜索了一下,产生< msxml3.dll
- Chrome的CSS支持程度 :Green / √ means current support.Orange / Δ means that
- 如何限制上传文件的大小?要限制上传大小,只需如下设置一个属性即可: &
- 这篇论坛文章详细介绍了完全卸载MySQL数据库5.0的具体方法,更多内容请参考下文:数据库突然出了问题,没办法只能重装,因为事先并不知道My
- 如果说亲密性原则是对元素的归类组合,是将元素之间逻辑理解上的差异在视觉上表现出来,是属于信息分类的话,那么对齐原则即是在视觉上串起这些差异化
- 在分析sIFR之前,先来快速的了解一下sIFR是什么,以及它是如何工作的。sIFR表示scalable Inman Flash Replac