开发者

基于Python实现密码生成与管理工具(进阶版)

开发者 https://www.devze.com 2025-08-15 09:57 出处:网络 作者: 超级小识
目录前言核心功能代码解析1. 导入必要的库2. 密码生成函数3. 加密与解密4. 密码存储与检索5. 主程序逻辑完整源码总结前言
目录
  • 前言
  • 核心功能
  • 代码解析
    • 1. 导入必要的库
    • 2. 密码生成函数
    • 3. 加密与解密
    • 4. 密码存储与检索
    • 5. 主程序逻辑
  • 完整源码
    • 总结

      前言

      在现代数字生活中,密码是保护个人信息和账户安全的第一道防线。随着网络服务的普及,每个人平均需要管理数十个不同账户的密码。一个强大且独特的密码通常应包含12个以上字符,混合大小写字母、数字和特殊符号,并且要避免使用生日、姓名等容易被猜到的信息。这样的密码能有效防止黑客通过破解、字典攻击等手段获取账户权限,从而避免数据泄露和身份盗用等安全风险。

      然而,记住多个复杂密码并不容易。研究表明,约60%的用户会在不同网站重复使用相同密码,这大大增加了安全风险。当其中一个网站发生数据泄露时,黑客就能利用这些凭证尝试登录其他服务。因此,密码生成与管理工具应运而生,它们不仅能自动创建高强度随机密码,还能安全地存储这些密码,用户只需记住一个主密码即可。

      本文将详细介绍一个简单的密码生成与管理工具的实现方式。这个工具基于python编程语言开发,使用标准库中的secrets模块来确保密码生成的随机性,并采用AES加密算法保护存储的密码数据。我们将逐步解释其核心功能,包括:

      • 密码生成算法的工作原理
      • 加密存储的实现机制
      • 用户界面的设计思路

      即使你没有任何编程基础,也能理解它的工作原理。我们将通过类比日常生活中的保险箱来解释加密过程,用简单的数学概念说明随机数生成原理。最后,我们会提供完整的代码实现,包括详细的注释和使用说明,供你参考或直接使用。这个工具不仅能帮助个人用户管理密码,也可以作为小型团队的共享密码管理解决js方案。

      核心功能

      该工具主要包含以下几个功能:

      • 生成随机密码:根据用户设定的长度和字符类型(字母、数字、符号)生成高强度的随机密码。
      • 存储密码:将生成的密码与对应的账户信息关联存储,方便后续查询。
      • 检索密码:通过账户信息快速找到对应的密码。
      • 加密存储:确保密码文件的安全性,防止未经授权的访问。

      代码解析

      1. 导入必要的库

      import random
      import string
      import json
      from cryptography.fernet import Fernet
      import os
      
      • random:用于生成随机密码。
      • string:提供字母、数字、符号等字符集合。
      • json:用于以结构化格式存储密码数据。
      • cryptography.fjsernet:提供加密功能,确保密码存储安全。
      • os:用于检查文件是否存在。

      2. 密码生成函数

      def generate_password(length=12, use_letters=True, use_numbers=True, use_symbols=True):
          characters = ""
          if use_letters:
              characters += string.ascii_letters
          if use_numbers:
              characters += string.digits
          if use_symbols:
              characters += string.punctuation
          
          if 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 key
      
      def 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] = password
          encrypted_data = encrypt_data(json.dumps(data), key)
          
          with open(storage_file, "wb") as file:
              file.write(encrypted_data)
      
      def get_password(account, key, storag编程客栈e_file="passwords.enc"):
          if not os.path.exists(storage_file):
        www.devze.com      return None
          
          with 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("退出程序。")
                  break
              
              else:
                  print("无效选项,请重试。")
      
      if __name__ == "__main__":
          main()
      

      提供交互式菜单,支持生成、存储和检索密码。

      用户可以选择手动输入密码或自动生成。

      完整源码

      import random
      import string
      import json
      from cryptography.fernet import Fernet
      import os
      
      def generate_password(length=12, use_letters=True, use_numbers=True, use_symbols=True):
          characters = ""
          if use_letters:
              characters += string.ascii_letters
          if use_numbers:
              characters += string.digits
          if use_symbols:
              characters += string.punctuation
          
          if 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 key
      
      def 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] = password
          encrypted_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 None
          
          with 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"生成的密码: {passwordjs}")
              
              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("退出程序。")
                  break
              
              else:
                  print("无效选项,请重试。")
      
      if __name__ == "__main__":
          main()
      

      总结

      该密码生成与管理工具提供了基本的安全功能,包括随机密码生成、加密存储和检索。虽然这是一个简单的实现,但足以应对个人使用场景。

      如果你想进一步改进,可以考虑:

      • 增加密码强度检查功能。
      • 支持多用户管理。
      • 提供图形界面(GUI)版本。

      到此这篇关于基于Python实现密码生成与管理工具(进阶版)的文章就介绍到这了,更多相关Python密码生成与管理内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号