用Python创建一个简单的密码管理器

目录

简介

环境准备

安装依赖

项目结构

编写代码

1. 加密和解密函数

2. 数据库操作

3. 主程序

结论


简介

在现代生活中,我们总是需要记住大量的密码。管理这些密码可能是一项繁琐且具有挑战性的任务。一个好的解决方案是使用一个密码管理器,它可以帮助你存储和管理所有密码。在这篇博文中,我们将使用Python编写一个简单的密码管理器。

环境准备

在开始之前,请确保你已经安装了Python和pip(Python包管理工具)。你可以从Python官网下载并安装最新版本的Python。

安装依赖

我们将使用以下Python库来构建我们的密码管理器:

  • cryptography:用于加密和解密密码。
  • sqlite3:用于存储密码。

在命令行中运行以下命令来安装所需的Python库:

pip install cryptography
项目结构

我们将创建一个包含以下文件的项目:

  • main.py:主程序文件。
  • database.db:用于存储密码的数据库文件。
编写代码
1. 加密和解密函数

首先,我们需要编写一些函数来加密和解密密码。我们将使用cryptography库中的Fernet模块。

from cryptography.fernet import Fernet

def generate_key():
    """生成一个新的加密密钥"""
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)

def load_key():
    """加载之前生成的加密密钥"""
    return open("secret.key", "rb").read()

def encrypt_message(message, key):
    """加密消息"""
    f = Fernet(key)
    encrypted_message = f.encrypt(message.encode())
    return encrypted_message

def decrypt_message(encrypted_message, key):
    """解密消息"""
    f = Fernet(key)
    decrypted_message = f.decrypt(encrypted_message).decode()
    return decrypted_message
2. 数据库操作

接下来,我们需要编写一些函数来操作数据库。我们将使用sqlite3库。

import sqlite3

def create_database():
    """创建用于存储密码的数据库"""
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS passwords (
        id INTEGER PRIMARY KEY,
        service TEXT NOT NULL,
        username TEXT NOT NULL,
        password TEXT NOT NULL
    )
    """)
    conn.commit()
    conn.close()

def add_password(service, username, password):
    """向数据库添加新的密码"""
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute("INSERT INTO passwords (service, username, password) VALUES (?, ?, ?)", (service, username, password))
    conn.commit()
    conn.close()

def get_password(service):
    """从数据库获取密码"""
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute("SELECT username, password FROM passwords WHERE service=?", (service,))
    result = cursor.fetchone()
    conn.close()
    return result
3. 主程序

最后,我们将编写主程序来整合上述功能。用户可以选择添加新的密码或获取已存储的密码。

import os

def main():
    if not os.path.exists("secret.key"):
        generate_key()
    key = load_key()

    create_database()

    while True:
        print("1. 添加新密码")
        print("2. 获取已存储的密码")
        print("3. 退出")
        choice = input("请选择一个操作: ")

        if choice == "1":
            service = input("请输入服务名称: ")
            username = input("请输入用户名: ")
            password = input("请输入密码: ")
            encrypted_password = encrypt_message(password, key)
            add_password(service, username, encrypted_password)
            print("密码已添加!")

        elif choice == "2":
            service = input("请输入服务名称: ")
            result = get_password(service)
            if result:
                username, encrypted_password = result
                password = decrypt_message(encrypted_password, key)
                print(f"用户名: {username}")
                print(f"密码: {password}")
            else:
                print("未找到该服务的密码")

        elif choice == "3":
            break

        else:
            print("无效的选择,请重新选择")

if __name__ == "__main__":
    main()
结论

在这篇博文中,我们创建了一个简单的密码管理器。这个管理器可以帮助你安全地存储和管理密码。尽管这个示例非常基本,但它展示了如何使用Python和一些常用库来构建有用的工具。你可以在此基础上进行扩展,例如添加用户界面、更高级的加密算法等。希望这篇博文对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值