進階向:密碼生成與管理工具

密碼生成與管理工具:從零開始的完全指南

在現代數字生活中,密碼是保護個人信息和賬戶安全的第一道防線。隨著網絡服務的普及,每個人平均需要管理數十個不同賬戶的密碼。一個強大且獨特的密碼通常應包含12個以上字符,混合大小寫字母、數字和特殊符號,并且要避免使用生日、姓名等容易被猜到的信息。這樣的密碼能有效防止黑客通過暴力破解、字典攻擊等手段獲取賬戶權限,從而避免數據泄露和身份盜用等安全風險。

然而,記住多個復雜密碼并不容易。研究表明,約60%的用戶會在不同網站重復使用相同密碼,這大大增加了安全風險。當其中一個網站發生數據泄露時,黑客就能利用這些憑證嘗試登錄其他服務。因此,密碼生成與管理工具應運而生,它們不僅能自動創建高強度隨機密碼,還能安全地存儲這些密碼,用戶只需記住一個主密碼即可。

本文將詳細介紹一個簡單的密碼生成與管理工具的實現方式。這個工具基于Python編程語言開發,使用標準庫中的secrets模塊來確保密碼生成的隨機性,并采用AES加密算法保護存儲的密碼數據。我們將逐步解釋其核心功能,包括:

  1. 密碼生成算法的工作原理
  2. 加密存儲的實現機制
  3. 用戶界面的設計思路

即使你沒有任何編程基礎,也能理解它的工作原理。我們將通過類比日常生活中的保險箱來解釋加密過程,用簡單的數學概念說明隨機數生成原理。最后,我們會提供完整的代碼實現,包括詳細的注釋和使用說明,供你參考或直接使用。這個工具不僅能幫助個人用戶管理密碼,也可以作為小型團隊的共享密碼管理解決方案。


密碼生成與管理工具的核心功能

該工具主要包含以下幾個功能:

  1. 生成隨機密碼:根據用戶設定的長度和字符類型(字母、數字、符號)生成高強度的隨機密碼。
  2. 存儲密碼:將生成的密碼與對應的賬戶信息關聯存儲,方便后續查詢。
  3. 檢索密碼:通過賬戶信息快速找到對應的密碼。
  4. 加密存儲:確保密碼文件的安全性,防止未經授權的訪問。

代碼解析

1. 導入必要的庫

import random
import string
import json
from cryptography.fernet import Fernet
import os

  • random:用于生成隨機密碼。
  • string:提供字母、數字、符號等字符集合。
  • json:用于以結構化格式存儲密碼數據。
  • cryptography.fernet:提供加密功能,確保密碼存儲安全。
  • os:用于檢查文件是否存在。

2. 密碼生成函數

def generate_password(length=12, use_letters=True, use_numbers=True, use_symbols=True):characters = ""if use_letters:characters += string.ascii_lettersif use_numbers:characters += string.digitsif use_symbols:characters += string.punctuationif not characters:raise ValueError("至少選擇一種字符類型(字母、數字或符號)")return ''.join(random.choice(characters) for _ in range(length))

  • length:密碼長度,默認為12位。
  • use_letters:是否包含字母(大小寫)。
  • use_numbers:是否包含數字。
  • use_symbols:是否包含符號。
  • 如果未選擇任何字符類型,會拋出錯誤提示。

3. 加密與解密

def generate_key():return Fernet.generate_key()def load_key(key_file="secret.key"):if not os.path.exists(key_file):key = generate_key()with open(key_file, "wb") as key_file_obj:key_file_obj.write(key)else:with open(key_file, "rb") as key_file_obj:key = key_file_obj.read()return keydef encrypt_data(data, key):fernet = Fernet(key)return fernet.encrypt(data.encode())def decrypt_data(encrypted_data, key):fernet = Fernet(key)return fernet.decrypt(encrypted_data).decode()

  • generate_key():生成一個加密密鑰。
  • load_key():檢查密鑰文件是否存在,若不存在則生成并存儲。
  • encrypt_data():加密數據。
  • decrypt_data():解密數據。

4. 密碼存儲與檢索

def save_password(account, password, key, storage_file="passwords.enc"):data = {}if os.path.exists(storage_file):with open(storage_file, "rb") as file:encrypted_data = file.read()decrypted_data = decrypt_data(encrypted_data, key)data = json.loads(decrypted_data)data[account] = passwordencrypted_data = encrypt_data(json.dumps(data), key)with open(storage_file, "wb") as file:file.write(encrypted_data)def get_password(account, key, storage_file="passwords.enc"):if not os.path.exists(storage_file):return Nonewith open(storage_file, "rb") as file:encrypted_data = file.read()decrypted_data = decrypt_data(encrypted_data, key)data = json.loads(decrypted_data)return data.get(account, None)

  • save_password():將賬戶和密碼加密存儲到文件。
  • get_password():從加密文件中檢索特定賬戶的密碼。

5. 主程序邏輯

def main():key = load_key()print("密碼生成與管理工具")while True:print("\n選項:")print("1. 生成新密碼")print("2. 存儲密碼")print("3. 檢索密碼")print("4. 退出")choice = input("請選擇操作 (1/2/3/4): ")if choice == "1":length = int(input("輸入密碼長度: "))use_letters = input("包含字母? (y/n): ").lower() == "y"use_numbers = input("包含數字? (y/n): ").lower() == "y"use_symbols = input("包含符號? (y/n): ").lower() == "y"password = generate_password(length, use_letters, use_numbers, use_symbols)print(f"生成的密碼: {password}")elif choice == "2":account = input("輸入賬戶名稱: ")password = input("輸入密碼(留空生成隨機密碼): ")if not password:length = int(input("輸入密碼長度: "))use_letters = input("包含字母? (y/n): ").lower() == "y"use_numbers = input("包含數字? (y/n): ").lower() == "y"use_symbols = input("包含符號? (y/n): ").lower() == "y"password = generate_password(length, use_letters, use_numbers, use_symbols)print(f"生成的密碼: {password}")save_password(account, password, key)print("密碼已存儲!")elif choice == "3":account = input("輸入賬戶名稱: ")password = get_password(account, key)if password:print(f"賬戶 {account} 的密碼: {password}")else:print("未找到該賬戶的密碼。")elif choice == "4":print("退出程序。")breakelse:print("無效選項,請重試。")if __name__ == "__main__":main()

  • 提供交互式菜單,支持生成、存儲和檢索密碼。
  • 用戶可以選擇手動輸入密碼或自動生成。

完整源碼

import random
import string
import json
from cryptography.fernet import Fernet
import osdef generate_password(length=12, use_letters=True, use_numbers=True, use_symbols=True):characters = ""if use_letters:characters += string.ascii_lettersif use_numbers:characters += string.digitsif use_symbols:characters += string.punctuationif not characters:raise ValueError("至少選擇一種字符類型(字母、數字或符號)")return ''.join(random.choice(characters) for _ in range(length))def generate_key():return Fernet.generate_key()def load_key(key_file="secret.key"):if not os.path.exists(key_file):key = generate_key()with open(key_file, "wb") as key_file_obj:key_file_obj.write(key)else:with open(key_file, "rb") as key_file_obj:key = key_file_obj.read()return keydef encrypt_data(data, key):fernet = Fernet(key)return fernet.encrypt(data.encode())def decrypt_data(encrypted_data, key):fernet = Fernet(key)return fernet.decrypt(encrypted_data).decode()def save_password(account, password, key, storage_file="passwords.enc"):data = {}if os.path.exists(storage_file):with open(storage_file, "rb") as file:encrypted_data = file.read()decrypted_data = decrypt_data(encrypted_data, key)data = json.loads(decrypted_data)data[account] = passwordencrypted_data = encrypt_data(json.dumps(data), key)with open(storage_file, "wb") as file:file.write(encrypted_data)def get_password(account, key, storage_file="passwords.enc"):if not os.path.exists(storage_file):return Nonewith open(storage_file, "rb") as file:encrypted_data = file.read()decrypted_data = decrypt_data(encrypted_data, key)data = json.loads(decrypted_data)return data.get(account, None)def main():key = load_key()print("密碼生成與管理工具")while True:print("\n選項:")print("1. 生成新密碼")print("2. 存儲密碼")print("3. 檢索密碼")print("4. 退出")choice = input("請選擇操作 (1/2/3/4): ")if choice == "1":length = int(input("輸入密碼長度: "))use_letters = input("包含字母? (y/n): ").lower() == "y"use_numbers = input("包含數字? (y/n): ").lower() == "y"use_symbols = input("包含符號? (y/n): ").lower() == "y"password = generate_password(length, use_letters, use_numbers, use_symbols)print(f"生成的密碼: {password}")elif choice == "2":account = input("輸入賬戶名稱: ")password = input("輸入密碼(留空生成隨機密碼): ")if not password:length = int(input("輸入密碼長度: "))use_letters = input("包含字母? (y/n): ").lower() == "y"use_numbers = input("包含數字? (y/n): ").lower() == "y"use_symbols = input("包含符號? (y/n): ").lower() == "y"password = generate_password(length, use_letters, use_numbers, use_symbols)print(f"生成的密碼: {password}")save_password(account, password, key)print("密碼已存儲!")elif choice == "3":account = input("輸入賬戶名稱: ")password = get_password(account, key)if password:print(f"賬戶 {account} 的密碼: {password}")else:print("未找到該賬戶的密碼。")elif choice == "4":print("退出程序。")breakelse:print("無效選項,請重試。")if __name__ == "__main__":main()


總結

該密碼生成與管理工具提供了基本的安全功能,包括隨機密碼生成、加密存儲和檢索。雖然這是一個簡單的實現,但足以應對個人使用場景。

如果你想進一步改進,可以考慮:

  • 增加密碼強度檢查功能。
  • 支持多用戶管理。
  • 提供圖形界面(GUI)版本。

希望這篇指南對你有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決 Gitee 中 git push 因郵箱隱私設置導致的失敗問題

解決 Gitee 中 git push 因郵箱隱私設置導致的失敗問題 在使用 Git 向 Gitee 遠程倉庫推送代碼時,可能會遇到因郵箱隱私設置引發的 git push 失敗情況。最近我就碰到了,現在把問題現象、原因和解決方法分享出來。 一、錯誤現象 執行 git push -u origin …

Flutter的三棵樹

“三棵樹”是 Flutter 渲染和構建UI的核心機制,理解它們對于掌握 Flutter 至關重要。這三棵樹分別是: Widget 樹 Element 樹 RenderObject 樹 它們協同工作,以實現 Flutter 的高性能渲染和高效的響應式編程模型。 Flutter 是聲明式的UI&…

同一臺nginx中配置多個前端項目的三種方式

目錄 第一種方式:配置多個二級域名 第二種方式:配置端口轉發(不推薦) 第三種方式:同一個server中基于location配置(重點講解) 第一種方式:配置多個二級域名 一個域名下面申請多個二級域名,每個二級域名配置一個vue前端項目,這個很好配置,在這里不再詳細說明。 …

第二家公司雖然用PowerBI ,可能更適合用以前的QuickBI

第二家公司雖然用PowerBI ,可能更適合用以前的QuickBI現在回想一下,第二家公司數據源是MySQL ,常規報表是用excel報表,另外還做了一張能發布到web的看板供運營使用。基于基本情況,quickbi 的早期版本是合適的&#xff…

STM32 USBx Device HID standalone 移植示例 LAT1466

關鍵字:USBx, Device, HID,standalone 1.設計目的 目前 USBx Device standalone 的官方示例較少,不過使用 STM32CubeMX 可以快速地生成 USBx Device 相關類的示例工程,會很方便大家的開發。這里以 NUCLEO-H563 為例&…

python創建并寫入excel文件

大家好,這里是七七,今天來跟大家分享一個python創建并寫入一個excel文件的小例子,話不多說,開始介紹。首先我們來看一下這一小段代碼。import openpyxl# 創建一個新的 Excel 工作簿workbook openpyxl.Workbook()# 獲取當前活動的…

react native 出現 FATAL EXCEPTION: OkHttp Dispatcher

react native 出現 FATAL EXCEPTION: OkHttp Dispatcher 報錯信息FATAL EXCEPTION: OkHttp DispatcherProcess: , PID: 8868java.lang.NoSuchMethodError: No virtual method toString(Z)Ljava/lang/String; in class Lokhttp3/Cookie; or its super classes (declaration of o…

sentinel實現控制臺與nacos數據雙向綁定

有兩種方式可以實現&#xff1a;Springboot客戶端做相應配置&#xff08;推薦&#xff09;修改sentinel-dashboard的源碼一、Springboot客戶端做相應配置&#xff08;推薦&#xff09;1、添加依賴<dependency><groupId>com.alibaba.csp</groupId><artifac…

Kubernetes (k8s)

Kubernetes (k8s) 以下是一份 ?Kubernetes (k8s) 基礎使用教程&#xff0c;涵蓋從環境搭建到核心操作的完整流程&#xff0c;附詳細命令和示例&#xff1a; &#x1f680; ?一、環境準備&#xff08;3種方式&#xff09;?? ?1. 本地開發環境&#xff08;推薦&#xff09;?…

三打ANSYS HFSS

2. 激勵方式&#xff08;端口&#xff09;詳細對比分析在HFSS中&#xff0c;“激勵方式”和“端口”這兩個詞經常混用&#xff0c;但嚴格來說&#xff0c;“端口”是實現“激勵”的一種最主要的方式。端口類型工作原理適用情況優點缺點波端口 (Wave Port)默認首選。計算端口的固…

3.python——數據類型轉換

python的數據類型轉換分為兩種&#xff1a; 隱式轉換&#xff1a;自動完成 顯式轉換&#xff1a;用類型函數轉換 隱式轉換 # 自動轉為浮點數 num_int 123 num_flo 1.23num_new num_int num_flo顯式轉換 整型 x int(1) # x 輸出結果為 1 y int(2.8) # y 輸出結果為 2 z …

迅為RK3568開發板OpenHarmonyv3.2-Beta4版本測試-命令終端

將串口連接到開發板的調試串口&#xff0c;進入 OpenHarmony 系統后&#xff0c;會自動進入 OpenHarmony終端&#xff0c;如下圖所示&#xff1a;

【面試題】介紹一下BERT和GPT的訓練方式區別?

BERT(雙向編碼器): 預訓練任務: 掩碼語言模型(MLM):隨機掩蓋15%的token,其中: 80%替換為[MASK] 10%替換為隨機token 10%保持原樣 下一句預測(NSP):判斷兩個句子是否連續(后續版本已移除) 訓練特點: 使用雙向Transformer編碼器 同時利用左右上下文信息 適合理解類任…

邪修實戰系列(1)

1、第一階段邪修實戰總覽&#xff08;9.1-9.30&#xff09; 把第一階段&#xff08;基礎夯實期&#xff09;的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢&#xff0c;強調“用輸出倒逼輸入”&#xff0c;確保每一分鐘的學習都直接服務…

XR數字融合工作站打造智能制造專業學習新范式

智能制造是工業4.0的核心發展方向&#xff0c;涵蓋數字化設計、智能生產、工業機器人、數字孿生、物聯網等關鍵技術。然而&#xff0c;傳統教學模式在設備成本高、實訓風險大、抽象概念難理解等方面存在諸多挑戰。XR數字融合工作站,利用VR/AR/MR等技術&#xff0c;通過虛擬仿真…

基于FPGA實現數字QAM調制系統

基于FPGA實現數字QAM調制系統題目要求一、代碼設計1.頂層2.分頻3.m序列4.串轉并5.映射6.正弦波余弦波生成ROM和7.ask二、仿真波形總結題目要求 FPGA實現數字QAM調制系統要求根據正交振幅調制原理&#xff0c;利用正弦載波信號發生器&#xff0c;實現調制信號。調制原理會利用到…

DAY 22 復習日

浙大疏錦行復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 導入需要的庫 import pandas as pd # 用于數據處理和分析&#xff0c;…

biocmanager安裝 庫 老是提示網絡連接錯誤 才嘗試各種辦法

您好&#xff0c;遇到 BioManager &#xff08;通常是 BiocManager&#xff09;安裝R包時提示網絡連接錯誤確實非常令人頭疼。這通常與R/RStudio的配置、網絡環境&#xff08;尤其是國內用戶&#xff09;或SSL證書問題有關。 請不要著急&#xff0c;我們可以按照從易到難的順序…

【開題答辯全過程】以 智能商品數據分析系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

解構復雜財務逆向業務:如何優雅地生成與管理負數單?

文章目錄一 核心復雜性二 關鍵設計模式&#xff1a;三 棘手場景與解決方案&#xff1a;1.分批合并處理&#xff1a;負數單需能智能拆分&#xff0c;精準沖銷多批次的正向單據。2.優先級問題&#xff1a;3.超額處理&#xff1a;系統應堅決攔截而非處理&#xff0c;防止資金損失和…