python 隨機密碼生成器的實現示例
更新時間:2023年11月23日 09:43:12 作者:mYlEaVeiSmVp
隨機密碼生成器是一種非常有用的工具,它可以幫助我們生成隨機的、復雜的密碼,提高我們的賬戶安全性,本文就來介紹一下python 隨機密碼生成器的實現示例,感興趣的可以了解一下
最近在研究PySimpleGUI庫,把之前寫的一個隨機密碼生成器改成GUI版本發(fā)出來,有興趣的兄弟們可以拿走。
因為能力有限,目前只能寫生成一個隨機密碼的Gui版本,等我學了更多的內容再慢慢完善。
核心代碼很簡單,界面也很粗陋。
如果你能寫得更好,不要噴,直接回帖發(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 #數字 if biaodian: words += string.punctuation #標點 #規(guī)避樣本數量 < 密碼長度的問題 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)) #生產隨機列表 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') # 設置當前主題 xuan_frame = [ sg.Checkbox( '小寫a-z', default=True, key='小寫', ), sg.Checkbox( '大寫A-Z', default=True, key='大寫', ), sg.Checkbox( '數字0-9', default=True, key='數字', ), 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('密碼個數'), sg.Slider( range=(5, 55), default_value=5, orientation='horizontal', #滑塊方向 tick_interval=10, #顯示的步長 enable_events=True, key='個數', 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='結果', 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( '復制所有密碼', key='復制所有密碼', 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 != '復制所有密碼': #任何事件都會生成密碼 pwds = get_passwords(values['小寫'], values['大寫'], values['數字'], values['標點'], values['自定義'], values['前綴'], values['后綴'], values['排除'], int(values['長度']), int(values['個數'])) # print(event, values) if event in ['個數', '長度']: window['結果'].update(pwds) window['提示'].update('點擊單條密碼,可復制到剪貼板') if event == '結果': try: pwd = values['結果'][0].split('.', 1)[1].strip() copy(pwd) window['提示'].update(f'已復制:\n{pwd}') except: window['提示'].update('取消或勾選密碼類型后,要拖動滑塊,才能重新生成') if event == '清空': window['長度'].update(0) window['個數'].update(0) window['結果'].update('') window['提示'].update('') window['自定義'].update('') window['前綴'].update('') window['后綴'].update('') window['排除'].update('') if event == '復制所有密碼': try: passwords = [i.split('.', 1)[1].strip() for i in pwds] copy('\n'.join(passwords)) window['提示'].update(f'【所有】密碼({len(pwds)}條)已復制到剪貼板') except: window['提示'].update('取消或勾選密碼類型后,要拖動滑塊,才能重新生成') window.close() if __name__ == '__main__': gui()
到此這篇關于python 隨機密碼生成器的實現示例的文章就介紹到這了,更多相關python 隨機密碼生成器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!