零基礎帶你使用Python實現簡單的安全密碼生成器
在數字化時代,賬號密碼是我們保護個人信息與資產安全的第一道防線。使用重復、簡單的密碼(如生日、手機號)極易遭受破解,而手動構思復雜密碼又容易遺忘。對于編程新手而言,親手實現一款密碼生成器,不僅能解決日常密碼需求,還能鞏固 Python 字符串處理、隨機數生成與函數封裝的核心知識點。本文將帶領大家使用 Python 內置庫,打造一款支持自定義長度、可選字符集、批量生成且可本地保存的安全密碼生成器,代碼原創(chuàng)無版權,可自由修改、分發(fā)與商用。
一、核心功能設計
本次實現的密碼生成器以「安全、靈活、實用」為核心,聚焦日常密碼使用場景,規(guī)劃了以下 5 項核心功能:
- 自定義密碼長度:支持 8-64 位密碼生成(符合主流平臺密碼長度要求),默認生成 16 位高強度密碼
- 可選字符集組合:支持勾選「大寫字母、小寫字母、數字、特殊符號」四種字符集,按需組合
- 高強度隨機生成:避免偽隨機數漏洞,生成無規(guī)律、難破解的安全密碼
- 批量生成密碼:支持一次性生成多個密碼,滿足多賬號注冊的批量需求
- 本地保存結果:將生成的密碼列表保存到本地文本文件,方便查閱與記錄
二、環(huán)境準備
本次開發(fā)無需安裝任何第三方庫,僅依賴 Python 內置標準庫,環(huán)境要求如下:
- Python 3.6 及以上版本(兼容 Windows/macOS/Linux 所有主流平臺)
- 無額外依賴庫,直接使用
random、string、os三個內置庫
驗證 Python 環(huán)境是否就緒:打開終端 / 命令提示符,輸入以下命令,若正常顯示版本號則說明環(huán)境可用。
python --version # Windows 系統(tǒng) # 或 python3 --version # macOS/Linux 系統(tǒng)
三、代碼實現(例子)
本次密碼生成器采用「函數化編程」思路,將字符集配置、密碼生成、批量處理、文件保存等功能拆分為獨立函數,代碼可讀性強、易于修改擴展。所有生成的密碼最終可保存至 generated_passwords.txt 文件,方便后續(xù)查閱。
import random
import string
import os
# 定義默認配置(可直接修改,適配個人使用習慣)
DEFAULT_PASSWORD_LENGTH = 16 # 默認密碼長度
MIN_LENGTH = 8 # 最小密碼長度限制
MAX_LENGTH = 64 # 最大密碼長度限制
DEFAULT_BATCH_COUNT = 5 # 默認批量生成數量
def get_char_set(include_upper=True, include_lower=True, include_digits=True, include_symbols=True):
"""
構建密碼字符集:根據用戶選擇組合對應的字符類型
:param include_upper: 是否包含大寫字母(bool)
:param include_lower: 是否包含小寫字母(bool)
:param include_digits: 是否包含數字(bool)
:param include_symbols: 是否包含特殊符號(bool)
:return: 組合后的字符集字符串
"""
char_set = ""
# 拼接對應字符集
if include_upper:
char_set += string.ascii_uppercase # 大寫字母 A-Z
if include_lower:
char_set += string.ascii_lowercase # 小寫字母 a-z
if include_digits:
char_set += string.digits # 數字 0-9
if include_symbols:
char_set += string.punctuation # 特殊符號 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
# 驗證字符集是否為空
if not char_set:
raise ValueError("字符集不能為空!至少需要選擇一種字符類型用于生成密碼")
return char_set
def generate_single_password(length=DEFAULT_PASSWORD_LENGTH, char_set=None):
"""
生成單個安全密碼
:param length: 密碼長度(int)
:param char_set: 密碼字符集(str)
:return: 生成的密碼字符串
"""
# 驗證密碼長度是否合法
if not (MIN_LENGTH <= length <= MAX_LENGTH):
raise ValueError(f"密碼長度不合法!請輸入 {MIN_LENGTH}-{MAX_LENGTH} 之間的整數")
# 若未傳入字符集,使用默認完整字符集
if char_set is None:
char_set = get_char_set()
# 生成隨機密碼:使用 random.choices 從字符集中隨機選取指定長度的字符
# 加入 random.shuffle 打亂字符順序,提升密碼隨機性
password_chars = random.choices(char_set, k=length)
random.shuffle(password_chars) # 打亂字符排列,避免固定順序漏洞
password = ''.join(password_chars)
return password
def batch_generate_passwords(count=DEFAULT_BATCH_COUNT, length=DEFAULT_PASSWORD_LENGTH, char_set=None):
"""
批量生成密碼
:param count: 生成數量(int)
:param length: 單個密碼長度(int)
:param char_set: 密碼字符集(str)
:return: 密碼列表
"""
# 驗證批量生成數量是否合法
if count <= 0 or not isinstance(count, int):
raise ValueError("生成數量不合法!請輸入大于 0 的整數")
password_list = []
for _ in range(count):
password = generate_single_password(length, char_set)
password_list.append(password)
return password_list
def save_passwords_to_file(password_list, filename="generated_passwords.txt"):
"""
將生成的密碼列表保存到本地文本文件
:param password_list: 密碼列表(list)
:param filename: 保存文件名(str)
"""
if not password_list:
print("? 無有效密碼可保存!")
return
# 以追加模式寫入文件,避免覆蓋原有數據,同時添加時間戳便于區(qū)分
with open(filename, 'a', encoding='utf-8') as f:
# 寫入文件分隔符與時間戳
current_time = str(random.random()) # 簡化時間戳,新手易理解(可替換為 datetime 精確時間)
f.write(f"\n========== 密碼生成記錄 - {current_time} ==========\n")
for index, password in enumerate(password_list, start=1):
f.write(f"{index}. {password}\n")
print(f"? 密碼已成功保存至 {filename},共 {len(password_list)} 條記錄")
def main_interactive():
"""
交互式主菜單,提供用戶友好的操作入口
"""
print("?? 歡迎使用 Python 安全密碼生成器")
print(f"?? 默認配置:密碼長度 {DEFAULT_PASSWORD_LENGTH} 位,包含大小寫字母、數字、特殊符號")
print(f"?? 密碼長度限制:{MIN_LENGTH}-{MAX_LENGTH} 位,批量生成默認 {DEFAULT_BATCH_COUNT} 個\n")
while True:
# 打印主菜單
print("========== 密碼生成器主菜單 ==========")
print("1. 生成單個密碼")
print("2. 批量生成密碼")
print("3. 自定義字符集生成密碼")
print("4. 退出程序")
print("======================================")
# 獲取用戶選擇
try:
choice = int(input("請輸入您的操作選擇(1-4):"))
except ValueError:
print("? 輸入無效!請輸入 1-4 之間的整數\n")
continue
# 處理用戶選擇
if choice == 1:
# 生成單個密碼
try:
length = int(input(f"請輸入密碼長度(默認 {DEFAULT_PASSWORD_LENGTH},范圍 {MIN_LENGTH}-{MAX_LENGTH}):").strip() or DEFAULT_PASSWORD_LENGTH)
password = generate_single_password(length)
print(f"\n? 單個密碼生成成功:{password}\n")
# 詢問是否保存
save_choice = input("是否將該密碼保存到文件?(y/n,默認 n):").strip().lower()
if save_choice == 'y':
save_passwords_to_file([password])
except Exception as e:
print(f"? 生成失?。簕str(e)}\n")
elif choice == 2:
# 批量生成密碼
try:
count = int(input(f"請輸入生成數量(默認 {DEFAULT_BATCH_COUNT},大于 0):").strip() or DEFAULT_BATCH_COUNT)
length = int(input(f"請輸入密碼長度(默認 {DEFAULT_PASSWORD_LENGTH},范圍 {MIN_LENGTH}-{MAX_LENGTH}):").strip() or DEFAULT_PASSWORD_LENGTH)
password_list = batch_generate_passwords(count, length)
print(f"\n? 批量密碼生成成功,共 {count} 個:")
for index, pwd in enumerate(password_list, start=1):
print(f"{index}. {pwd}")
print()
# 詢問是否保存
save_choice = input("是否將這些密碼保存到文件?(y/n,默認 n):").strip().lower()
if save_choice == 'y':
save_passwords_to_file(password_list)
except Exception as e:
print(f"? 生成失?。簕str(e)}\n")
elif choice == 3:
# 自定義字符集生成密碼
print("\n請選擇需要包含的字符類型(輸入 y 表示包含,n 表示不包含,直接回車默認 y)")
try:
upper_choice = input("是否包含大寫字母(A-Z)?:").strip().lower() or 'y'
lower_choice = input("是否包含小寫字母(a-z)?:").strip().lower() or 'y'
digits_choice = input("是否包含數字(0-9)?:").strip().lower() or 'y'
symbols_choice = input("是否包含特殊符號(!@#$ 等)?:").strip().lower() or 'y'
# 轉換為布爾值
include_upper = (upper_choice == 'y')
include_lower = (lower_choice == 'y')
include_digits = (digits_choice == 'y')
include_symbols = (symbols_choice == 'y')
# 構建自定義字符集
char_set = get_char_set(include_upper, include_lower, include_digits, include_symbols)
# 選擇生成單個或批量
gen_type = input("\n請選擇生成類型(1-單個,2-批量,默認 1):").strip() or '1'
if gen_type == '1':
length = int(input(f"請輸入密碼長度(默認 {DEFAULT_PASSWORD_LENGTH},范圍 {MIN_LENGTH}-{MAX_LENGTH}):").strip() or DEFAULT_PASSWORD_LENGTH)
password = generate_single_password(length, char_set)
print(f"\n? 自定義字符集密碼生成成功:{password}\n")
save_choice = input("是否將該密碼保存到文件?(y/n,默認 n):").strip().lower()
if save_choice == 'y':
save_passwords_to_file([password])
elif gen_type == '2':
count = int(input(f"請輸入生成數量(默認 {DEFAULT_BATCH_COUNT},大于 0):").strip() or DEFAULT_BATCH_COUNT)
length = int(input(f"請輸入密碼長度(默認 {DEFAULT_PASSWORD_LENGTH},范圍 {MIN_LENGTH}-{MAX_LENGTH}):").strip() or DEFAULT_PASSWORD_LENGTH)
password_list = batch_generate_passwords(count, length, char_set)
print(f"\n? 自定義字符集批量密碼生成成功,共 {count} 個:")
for index, pwd in enumerate(password_list, start=1):
print(f"{index}. {pwd}")
print()
save_choice = input("是否將這些密碼保存到文件?(y/n,默認 n):").strip().lower()
if save_choice == 'y':
save_passwords_to_file(password_list)
else:
print("? 生成類型選擇無效!\n")
except Exception as e:
print(f"? 生成失敗:{str(e)}\n")
elif choice == 4:
# 退出程序
print("?? 程序已退出,感謝使用!生成的密碼已保存至 generated_passwords.txt(若選擇保存)")
break
else:
print("? 選擇無效!請輸入 1-4 之間的整數\n")
# 程序入口
if __name__ == "__main__":
main_interactive()四、代碼核心解析
字符集構建(get_char_set):借助 string 內置庫的預置常量(ascii_uppercase、ascii_lowercase 等)快速獲取各類字符,無需手動輸入字符集;加入非空校驗,避免生成空密碼,提升程序健壯性。
單個密碼生成(generate_single_password):
- 先校驗密碼長度是否在
8-64位的合理區(qū)間,符合主流平臺密碼要求。 - 使用
random.choices()從字符集中隨機選取指定長度的字符,支持字符重復選取(更符合真實密碼場景)。 - 加入
random.shuffle()打亂字符排列順序,避免出現「先大寫、再小寫、后數字」的固定規(guī)律,提升密碼隨機性與安全性。
批量密碼生成(batch_generate_passwords):通過循環(huán)調用單個密碼生成函數,收集結果到列表中,返回批量密碼;加入生成數量校驗,避免無效批量生成。
文件保存(save_passwords_to_file):采用「追加模式(a)」寫入文件,避免覆蓋原有密碼記錄;添加簡易時間戳分隔符,方便區(qū)分不同批次生成的密碼,提升文件可讀性。
交互式主菜單(main_interactive):通過 while True 實現循環(huán)交互,支持用戶自定義配置;加入多層 try-except 異常處理,避免用戶輸入無效值導致程序崩潰;提供「是否保存」的可選操作,提升用戶體驗。
五、使用教程
運行程序:將上述代碼保存為 password_generator.py,打開終端 / 命令提示符,進入文件所在目錄,輸入以下命令運行程序:
python password_generator.py # Windows 系統(tǒng) # 或 python3 password_generator.py # macOS/Linux 系統(tǒng)
操作流程:
- 運行后直接進入主菜單,默認配置為「16 位密碼、包含所有字符類型」。
- 選擇「1」:輸入自定義密碼長度(或直接回車使用默認),生成單個密碼,可選擇保存到本地文件。
- 選擇「2」:輸入生成數量和密碼長度,批量生成多個密碼,可查看所有結果并選擇保存。
- 選擇「3」:自定義勾選需要包含的字符類型(如不包含特殊符號),再選擇單個 / 批量生成,滿足特殊平臺的密碼要求。
- 選擇「4」:退出程序,所有保存的密碼均存儲在
generated_passwords.txt中。
結果查看:直接用記事本 / 文本編輯器打開 generated_passwords.txt,即可查看所有保存的密碼記錄,不同批次的密碼以分隔符區(qū)分,格式清晰易查閱。
密碼強度檢測:添加密碼強度評分功能(從長度、字符類型豐富度、無規(guī)律程度三個維度評分),標注「弱 / 中 / 強」等級,幫助用戶篩選更安全的密碼。
剪貼板自動復制:結合 pyperclip 第三方庫,生成密碼后自動復制到剪貼板,無需手動選中復制,提升使用便捷性。
避免常見弱密碼:構建常見弱密碼字典(如 123456、admin 等),生成密碼后進行比對,排除與弱密碼重復或相似的結果。
圖形化界面:使用 Python 內置 tkinter 庫或第三方庫 PyQt,打造可視化操作界面,添加「一鍵生成」「一鍵保存」「清空記錄」等按鈕,降低非編程用戶使用門檻。
加密存儲:對本地保存的密碼進行加密處理(如使用 cryptography 庫進行 AES 加密),避免他人查看本地文件獲取明文密碼,提升數據安全性。
六、總結
本次密碼生成器核心支持「單個生成、批量生成、自定義字符集」三大功能,且支持密碼本地持久化保存。
代碼采用函數化編程拆分功能,加入多層異常處理與參數校驗,提升程序健壯性,同時保證密碼的隨機性與安全性。
工具無第三方依賴可直接運行,具備清晰的擴展方向,方便新手后續(xù)進階優(yōu)化,提升工具的實用性與安全性。
到此這篇關于零基礎帶你使用Python實現簡單的安全密碼生成器的文章就介紹到這了,更多相關Python密碼生成器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python虛擬環(huán)境virtualenv安裝的詳細教程保姆級(Windows和linux)
本文詳細介紹了如何在Linux和Windows系統(tǒng)上安裝和配置virtualenv虛擬環(huán)境,包括依賴包安裝、系統(tǒng)環(huán)境變量設置、激活和退出環(huán)境,以及在PyCharm中的應用和導出依賴文件,需要的朋友可以參考下2024-09-09

