《密码管理:从设备到云端》
第3章 设备端密码管理器搭建(一)

3. 设备端密码管理器搭建(一):环境准备

在开始搭建本地密码管理器之前,我们需要准备好开发环境。本节将引导您完成 Python 环境配置、cryptography 库安装,并创建第一个 本地密码数据库。这是整个密码管理系统的基石,确保后续所有加密操作安全可靠。

🔧 步骤一 安装 Python 3.9+ 配置 pip 包管理器 📦 步骤二 安装 cryptography 加密算法库 🗄️ 步骤三 创建本地数据库 SQLite + 加密存储

3.1 安装 Python 与配置虚拟环境

推荐使用 Python 3.9 及以上版本,以支持最新的类型注解和安全性特性。请从 python.org 下载对应操作系统的安装包。

操作系统 安装命令 / 步骤 验证命令
Windows 下载 .exe 安装包,勾选 "Add Python to PATH" python --version
macOS brew install python@3.11 python3 --version
Linux (Ubuntu/Debian) sudo apt install python3 python3-pip python3-venv python3 --version && pip3 --version

创建并激活虚拟环境(推荐):

# 创建虚拟环境
python3 -m venv password_manager_env

# 激活虚拟环境 (Windows)
password_manager_env\Scripts\activate

# 激活虚拟环境 (macOS/Linux)
source password_manager_env/bin/activate

# 确认环境已激活 (终端会显示环境名称)
🐍 系统 Python 全局安装 可能影响其他项目 📦 虚拟环境 password_manager_env 隔离的 Python 环境 独立依赖,互不干扰 📁 项目目录 密码管理器代码 + 加密数据库文件

3.2 安装 cryptography 加密库

cryptography 是 Python 生态中最成熟的加密库之一,提供 Fernet 对称加密、公钥加密、哈希函数等。安装命令如下:

# 确保虚拟环境已激活,然后执行
pip install cryptography

# 验证安装
python -c "from cryptography.fernet import Fernet; print('cryptography 安装成功!')"

安装完成后,您将获得以下核心模块:

  • cryptography.fernet — 对称加密,适合加密密码数据库文件
  • cryptography.hazmat.primitives — 底层加密原语(AES、RSA、哈希等)
  • cryptography.hazmat.backends — 加密后端(OpenSSL 等)

3.3 创建本地密码数据库(SQLite + 加密)

我们将使用 SQLite 作为本地数据库引擎,配合 cryptography 对敏感字段进行加密。以下是创建数据库的完整代码:

import sqlite3
import os
from cryptography.fernet import Fernet

# 1. 生成或加载加密密钥
KEY_FILE = "master.key"
if not os.path.exists(KEY_FILE):
    key = Fernet.generate_key()
    with open(KEY_FILE, "wb") as f:
        f.write(key)
    print("✅ 新密钥已生成并保存到 master.key")
else:
    with open(KEY_FILE, "rb") as f:
        key = f.read()
    print("🔑 已加载现有密钥")

cipher = Fernet(key)

# 2. 创建 SQLite 数据库
DB_FILE = "password_vault.db"
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()

# 3. 创建密码条目表(加密存储密码字段)
cursor.execute("""
CREATE TABLE IF NOT EXISTS passwords (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    service TEXT NOT NULL,          -- 服务名称(明文)
    username TEXT NOT NULL,         -- 用户名(明文)
    encrypted_password BLOB NOT NULL, -- 加密后的密码
    notes TEXT,                     -- 备注(明文)
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")

conn.commit()
conn.close()
print(f"📁 数据库 {DB_FILE} 创建成功!")
print("📋 表结构:passwords (id, service, username, encrypted_password, notes, created_at)")
🗄️ SQLite password_vault.db 🔒 加密层 Fernet 对称加密 密钥:master.key AES-128-CBC + HMAC 📋 passwords 表 id (INTEGER PK) service (TEXT) username (TEXT) encrypted_password (BLOB) 🔐 notes (TEXT) created_at (TIMESTAMP)

3.4 验证数据库与加密功能

运行以下代码测试数据库写入和加密/解密流程:

import sqlite3
from cryptography.fernet import Fernet

# 加载密钥
with open("master.key", "rb") as f:
    key = f.read()
cipher = Fernet(key)

# 连接数据库
conn = sqlite3.connect("password_vault.db")
cursor = conn.cursor()

# 插入一条测试数据
service = "GitHub"
username = "demo_user"
password = "MyS3cur3P@ss!"
encrypted_pwd = cipher.encrypt(password.encode())

cursor.execute("""
INSERT INTO passwords (service, username, encrypted_password, notes)
VALUES (?, ?, ?, ?)
""", (service, username, encrypted_pwd, "测试条目 - 请及时删除"))

conn.commit()
print("✅ 测试数据已插入")

# 读取并解密
cursor.execute("SELECT service, username, encrypted_password FROM passwords WHERE service=?", (service,))
row = cursor.fetchone()
if row:
    decrypted_pwd = cipher.decrypt(row[2]).decode()
    print(f"🔓 解密成功:{row[0]} / {row[1]} -> 密码: {decrypted_pwd}")

conn.close()

预期输出:

✅ 测试数据已插入
🔓 解密成功:GitHub / demo_user -> 密码: MyS3cur3P@ss!
⚠️ 安全提醒: 请务必将 master.key 文件存放在安全位置,切勿提交到版本控制系统(如 Git)。建议使用环境变量或硬件安全模块(HSM)管理主密钥。

至此,您的设备端密码管理器环境已准备就绪!下一节我们将实现密码的增删改查(CRUD)操作界面。