python 隨機密碼生成器的實現(xiàn)示例
更新時間:2023年11月23日 09:43:12 作者:mYlEaVeiSmVp
隨機密碼生成器是一種非常有用的工具,它可以幫助我們生成隨機的、復(fù)雜的密碼,提高我們的賬戶安全性,本文就來介紹一下python 隨機密碼生成器的實現(xiàn)示例,感興趣的可以了解一下
最近在研究PySimpleGUI庫,把之前寫的一個隨機密碼生成器改成GUI版本發(fā)出來,有興趣的兄弟們可以拿走。
因為能力有限,目前只能寫生成一個隨機密碼的Gui版本,等我學(xué)了更多的內(nèi)容再慢慢完善。
核心代碼很簡單,界面也很粗陋。
如果你能寫得更好,不要噴,直接回帖發(fā)出來讓我參考下,謝謝。
代碼:
from pyperclip import copy
import PySimpleGUI as sg
import random
import string
def get_passwords(xiaoxie=True,
daxie=True,
shuzi=True,
biaodian=True,
zidingyi='',
qianzhui='',
houzhui='',
paichu='',
pwd_len=11,
pwd_count=1):
pwd_list = []
if not any([xiaoxie, daxie, shuzi, biaodian]): return '至少要勾選一種密碼類型!'
words = zidingyi
if xiaoxie: words += string.ascii_lowercase #小寫字母
if daxie: words += string.ascii_uppercase #大寫字母
if shuzi: words += string.digits #數(shù)字
if biaodian: words += string.punctuation #標點
#規(guī)避樣本數(shù)量 < 密碼長度的問題
if len(words) <= pwd_len: words = words * (pwd_len // len(words) + 1)
zhui_len = len(f'{qianzhui}{houzhui}')
if pwd_len < zhui_len:
return '密碼長度<前后綴的長度之和!'.split() * 3
for _ in range(pwd_count):
chosen = ''.join(random.sample(words, pwd_len)) #生產(chǎn)隨機列表
chosen = f'{qianzhui}{chosen}{houzhui}' #加前后綴
if set(paichu): #排除字符
for i in set(paichu):
chosen = chosen.replace(i, '')
pwd_list.append(chosen.strip()) # 組成字符串
return [
f'{str(n).zfill(len(str(pwd_count)))}. {i}'
for n, i in enumerate(pwd_list, 1)
]
def gui(): # sourcery skip: do-not-use-bare-except
sg.theme('GrayGrayGray') # 設(shè)置當前主題
xuan_frame = [
sg.Checkbox(
'小寫a-z',
default=True,
key='小寫',
),
sg.Checkbox(
'大寫A-Z',
default=True,
key='大寫',
),
sg.Checkbox(
'數(shù)字0-9',
default=True,
key='數(shù)字',
),
sg.Checkbox(
'標點',
default=True,
key='標點',
),
],
zidingyi_frame = [
sg.Text('自定義字:'),
sg.InputText(
key='自定義',
size=(10, 11),
),
sg.Text(' 前綴:'),
sg.InputText(
key='前綴',
size=(5, 11),
),
sg.Text(' 后綴:'),
sg.InputText(
key='后綴',
size=(5, 11),
),
],
paichu_frame = [
sg.Text('排除字符:'),
sg.InputText(
key='排除',
size=(40, 11),
),
],
chang_frame = [
sg.Text('密碼長度'),
sg.Slider(
range=(5, 55),
default_value=6,
orientation='horizontal', #滑塊方向
tick_interval=10, #顯示的步長
enable_events=True,
key='長度',
size=(41, 20))
],
shu_frame = [
sg.Text('密碼個數(shù)'),
sg.Slider(
range=(5, 55),
default_value=5,
orientation='horizontal', #滑塊方向
tick_interval=10, #顯示的步長
enable_events=True,
key='個數(shù)',
size=(41, 20))
],
layout = [[
sg.Frame(
'',
xuan_frame,
size=(400, 40),
pad=(5),
),
], [
sg.Frame(
'',
zidingyi_frame,
size=(400, 40),
pad=(5),
),
], [sg.Frame(
'',
paichu_frame,
size=(400, 40),
pad=(5),
)], [sg.Frame(
'',
chang_frame,
size=(400, 80),
pad=(5),
)], [sg.Frame(
'',
shu_frame,
size=(400, 80),
pad=(5),
)],
[
sg.Listbox([],
key='結(jié)果',
size=(57, 10),
horizontal_scroll=True,
highlight_background_color='gray',
font=('宋體', 10),
enable_events=True,
pad=(5, 10))
],
[
sg.Button('清空', key='清空', pad=(10, 10), enable_events=True),
sg.Button(
'復(fù)制所有密碼',
key='復(fù)制所有密碼',
button_color='#118890',
enable_events=True,
),
],
[
sg.Text(
'取消或勾選密碼類型后,要拖動滑塊,才能重新生成',
text_color='#0000ff',
key='提示',
font=('宋體', 10),
justification='center',
)
]]
# 創(chuàng)建展示窗口8
window = sg.Window('隨機密碼.220921 - [url=mailto:wkdxz@52pojie.cn]wkdxz@52pojie.cn[/url] ',
layout,
font=('微軟雅黑', 10),
size=(400, 610),
element_justification='center')
# 事件循環(huán)并獲取輸入值
while True:
event, values = window.read()
if not event:
break
elif event != '復(fù)制所有密碼': #任何事件都會生成密碼
pwds = get_passwords(values['小寫'], values['大寫'], values['數(shù)字'],
values['標點'], values['自定義'], values['前綴'],
values['后綴'], values['排除'], int(values['長度']),
int(values['個數(shù)']))
# print(event, values)
if event in ['個數(shù)', '長度']:
window['結(jié)果'].update(pwds)
window['提示'].update('點擊單條密碼,可復(fù)制到剪貼板')
if event == '結(jié)果':
try:
pwd = values['結(jié)果'][0].split('.', 1)[1].strip()
copy(pwd)
window['提示'].update(f'已復(fù)制:\n{pwd}')
except:
window['提示'].update('取消或勾選密碼類型后,要拖動滑塊,才能重新生成')
if event == '清空':
window['長度'].update(0)
window['個數(shù)'].update(0)
window['結(jié)果'].update('')
window['提示'].update('')
window['自定義'].update('')
window['前綴'].update('')
window['后綴'].update('')
window['排除'].update('')
if event == '復(fù)制所有密碼':
try:
passwords = [i.split('.', 1)[1].strip() for i in pwds]
copy('\n'.join(passwords))
window['提示'].update(f'【所有】密碼({len(pwds)}條)已復(fù)制到剪貼板')
except:
window['提示'].update('取消或勾選密碼類型后,要拖動滑塊,才能重新生成')
window.close()
if __name__ == '__main__':
gui()
到此這篇關(guān)于python 隨機密碼生成器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python 隨機密碼生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談django框架集成swagger以及自定義參數(shù)問題
這篇文章主要介紹了淺談django框架集成swagger以及自定義參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
Python循環(huán)結(jié)構(gòu)的應(yīng)用場景詳解
這篇文章主要介紹了Python循環(huán)結(jié)構(gòu)的應(yīng)用場景詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07

