# 密码笔记本-后端 **Repository Path**: bbullet/password-notebook---backend ## Basic Information - **Project Name**: 密码笔记本-后端 - **Description**: 密码笔记本-后端:专注于实现安全、高效的密码管理功能,支持多用户、跨平台使用,提供加密存储与访问控制。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-24 - **Last Updated**: 2025-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 密码管理器 - 零知识架构版本 这是一个基于uni-app开发的密码管理应用,采用**零知识架构**设计,支持微信小程序、H5、App等多端运行。项目使用AES-256-GCM加密算法和密钥身份系统,实现真正的端到端加密,确保用户数据安全。 ## 🔐 零知识架构 本项目采用**零知识架构**,具有以下核心特性: - **密钥即身份**:用户身份由密钥哈希唯一标识,无需传统用户名/密码登录 - **不可逆设计**:密钥无法反推出原始账号密码,即使后端被攻破也无法获取用户凭据 - **端到端加密**:数据在传输和存储过程中始终加密,后端无法访问明文数据 - **零知识验证**:后端完全不知道用户的原始凭据,只存储加密后的数据 ## 🚀 功能特性 ### 核心功能 - **密钥身份验证** - 基于密钥哈希的身份验证系统,无需传统登录 - **智能用户识别** - 自动检测新用户和现有用户,无缝注册/验证流程 - **密码管理** - 添加、编辑、删除密码,支持分类管理 - **智能搜索** - 实时搜索网站和用户名,支持模糊匹配 - **分类筛选** - 按社交、工作、金融、购物等分类筛选密码 - **密码生成器** - 可配置长度和字符类型的强密码生成 - **密码强度检测** - 实时显示密码强度和安全建议 - **数据加密存储** - 使用AES-256-GCM加密保护所有密码数据 - **安全设置** - 加密状态查看、数据管理和安全日志 ### 安全特性 - **AES-256-GCM加密** - 军用级加密算法保护数据 - **PBKDF2密钥派生** - 基于用户账号密码的安全密钥生成 - **密钥身份系统** - 使用密钥哈希作为用户唯一标识 - **本地加密存储** - 数据不离设备,确保隐私安全 - **零知识验证** - 后端无法获取用户原始凭据 - **自动密钥清理** - 退出时自动清除加密密钥 ### 交互体验 - **一键注册/验证** - 首次使用自动注册,后续使用自动验证 - **密码显示切换** - 点击眼睛图标切换明文/星号显示 - **卡片悬停效果** - 显示编辑/删除操作按钮 - **平滑动画** - 所有交互都有过渡动画效果 - **响应式设计** - 适配不同屏幕尺寸和设备 - **触摸友好** - 针对移动端优化的交互体验 ## 🎨 视觉设计 ### 配色方案 - **主色**: #007AFF (iOS蓝) - **辅助色**: #10B981 (安全绿) - **警告色**: #ef4444 (危险红) - **背景**: 渐变背景 (#667eea → #764ba2) - **分类标签**: 不同颜色区分功能 ### 字体与图标 - **字体**: 系统字体栈,密码字段使用等宽字体 - **图标**: uni-icons图标库,支持多种操作图标 - **视觉层次**: 清晰的信息分组和操作引导 ## 📱 页面结构 ### 1. 密钥验证页面 (`pages/login/login.vue`) - 用户名/密码输入框,支持密码显示切换 - "记住我"复选框,保持验证状态 - 智能按钮(新用户显示"注册并进入",现有用户显示"验证并进入") - 安全说明区域,解释零知识架构原理 - 表单验证和错误提示 ### 2. 主页面 (`pages/index/index.vue`) - 用户信息栏(显示当前用户名和密钥身份验证状态) - 顶部搜索栏(实时过滤和防抖优化) - 分类筛选菜单(底部弹出式) - 密码卡片列表(网格布局) - 右下角悬浮添加按钮 - 空状态提示和引导 - 安全设置入口 ### 3. 安全设置页面 (`pages/security/security.vue`) - 加密状态显示和算法信息 - 安全信息查看和提示 - 数据管理功能(导出、清除) - 安全日志和操作记录 ### 4. 弹窗组件 - **添加密码弹窗** - 包含密码生成器和强度检测 - **编辑密码弹窗** - 支持修改和删除操作 - **密码生成器** - 可配置的强密码生成 ## 🔧 技术实现 ### 前端技术栈 - **uni-app 3.0** - 跨平台开发框架,支持多端发布 - **Vue 3** - 组合式API,响应式数据管理 - **TypeScript** - 类型安全和开发体验 - **SCSS** - 样式预处理和模块化 - **Vite** - 快速构建工具 - **uni-ui** - 官方UI组件库 - **vue-i18n** - 国际化支持 ### 核心模块 - **密钥管理器** - 密钥生成、验证和身份管理 - **加密存储** - 基于密钥身份系统的数据加密存储 - **数据管理** - 密码数据的CRUD操作和状态管理 - **搜索筛选** - 实时搜索和分类筛选逻辑 - **UI组件** - 弹窗、提示框、加载状态组件 - **工具函数** - 密码生成、强度检测、ID生成 - **加密模块** - AES-256-GCM加密和密钥管理 - **安全组件** - 加密状态显示和安全设置 ### 加密技术 - **AES-256-GCM** - 高级加密标准,GCM模式提供认证加密 - **PBKDF2** - 密码派生函数,用于从用户凭据生成密钥 - **密钥身份系统** - 基于密钥哈希的用户身份验证 - **零知识架构** - 后端无法获取用户原始凭据的设计模式 ## 🔐 安全机制 ### 密钥生成流程 1. **用户输入**:用户名 + 密码 2. **固定盐值**:基于用户名生成固定盐值 3. **密钥派生**:使用PBKDF2从用户凭据派生唯一密钥 4. **密钥哈希**:生成密钥哈希用于身份验证 5. **数据加密**:使用派生密钥加密所有敏感数据 ### 身份验证流程 1. **密钥验证**:验证用户提供的密钥哈希 2. **本地验证**:在本地验证用户身份 3. **数据解密**:使用派生密钥解密用户数据 4. **会话管理**:维护安全的用户会话 ### 数据保护 - **端到端加密**:数据在传输和存储过程中始终加密 - **本地存储**:所有敏感数据在用户设备本地加密存储 - **密钥隔离**:不同用户的密钥完全隔离 - **自动清理**:退出时自动清除所有敏感数据 ## 🚀 快速开始 ### 环境要求 - JDK 17+ - MySQL 8.0+ - Maven 3.6+ ### 数据库配置 1. 创建MySQL数据库: ```sql CREATE DATABASE psnoted_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 修改配置文件 `src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/psnoted_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: your_password ``` ### 运行应用 ```bash # 构建项目 mvn clean package # 运行应用 java -jar target/psnoted-backend-1.0.0.jar ``` ### 访问接口 - **API文档**: http://localhost:8080/api/swagger-ui.html - **健康检查**: http://localhost:8080/api/auth/health ### 测试接口 #### 1. 注册用户 ```bash # Linux/macOS curl -X POST http://localhost:8080/api/auth/register-key \ -H "Content-Type: application/json" \ -d '{"keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","username":"testuser"}' # Windows PowerShell Invoke-WebRequest -Uri "http://localhost:8080/api/auth/register-key" -Method POST -ContentType "application/json" -Body '{"keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","username":"testuser"}' ``` #### 2. 验证用户 ```bash # Linux/macOS curl -X POST http://localhost:8080/api/auth/verify-key \ -H "Content-Type: application/json" \ -d '{"keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","username":"testuser"}' # Windows PowerShell Invoke-WebRequest -Uri "http://localhost:8080/api/auth/verify-key" -Method POST -ContentType "application/json" -Body '{"keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","username":"testuser"}' ``` #### 3. 更新密码数据 ```bash # Linux/macOS curl -X PUT "http://localhost:8080/api/passwords?keyHash=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" \ -H "Content-Type: application/json" \ -H "X-User-Key: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" \ -d '{"storageData":{"version":"2.0","keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","encryptedData":"base64encodeddata","timestamp":1703123456789},"syncTime":"2023-12-21T10:30:56.789Z"}' # Windows PowerShell Invoke-WebRequest -Uri "http://localhost:8080/api/passwords?keyHash=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" -Method PUT -ContentType "application/json" -Headers @{"X-User-Key"="a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"} -Body '{"storageData":{"version":"2.0","keyHash":"a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456","encryptedData":"base64encodeddata","timestamp":1703123456789},"syncTime":"2023-12-21T10:30:56.789Z"}' ``` #### 4. 获取密码数据 ```bash # Linux/macOS curl -X GET "http://localhost:8080/api/passwords?keyHash=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" \ -H "X-User-Key: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" # Windows PowerShell Invoke-WebRequest -Uri "http://localhost:8080/api/passwords?keyHash=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456" -Headers @{"X-User-Key"="a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456"} ``` ### 运行测试 ```bash # 运行所有测试 mvn test # 运行特定测试类 mvn test -Dtest=PasswordDataServiceTest ``` ## 🎯 核心功能 ### 后端API功能 - ✅ 用户密钥验证和注册 - ✅ 密码数据获取和更新 - ✅ 零知识架构设计 - ✅ 完整的测试覆盖 - ✅ Swagger API文档 ### 前端功能 - 用户名/密码输入框,支持密码显示切换 - 智能用户识别(新用户vs现有用户) - 密码管理(添加、编辑、删除) - 智能搜索和分类筛选 - 密码生成器 - 密码强度检测 - 数据加密存储 ## 🚀 前端快速开始 ### 环境要求 - Node.js 16+ - uni-app CLI - 微信开发者工具(小程序开发) ### 安装步骤 ```bash # 克隆项目 git clone [项目地址] # 安装依赖 npm install # 运行开发服务器 npm run dev:h5 # 构建小程序 npm run build:mp-weixin ``` ### 使用说明 1. **首次使用**:输入用户名和密码,系统自动注册新身份 2. **后续使用**:输入相同的用户名和密码,系统自动验证身份 3. **密码管理**:添加、编辑、删除密码,支持分类和搜索 4. **安全退出**:点击退出按钮,系统自动清除所有敏感数据 ## 📊 项目状态 ### 已完成功能 - ✅ 零知识架构设计 - ✅ 密钥身份验证系统 - ✅ 密码管理核心功能 - ✅ 搜索和分类功能 - ✅ 密码生成器 - ✅ 数据加密存储 - ✅ 用户界面优化 ### 开发中功能 - 🔄 数据同步功能 - 🔄 多设备支持 - 🔄 备份和恢复机制 ### 计划功能 - 📋 生物识别支持 - 📋 密码泄露检测 - 📋 安全审计日志 - 📋 团队共享功能 ## 🤝 贡献指南 欢迎提交Issue和Pull Request来改进项目。 ### 开发规范 - 使用TypeScript进行类型安全开发 - 遵循Vue 3组合式API最佳实践 - 保持代码注释和文档更新 - 确保所有新功能经过安全测试 ## 📄 许可证 本项目采用MIT许可证,详见LICENSE文件。 ## 📞 联系方式 如有问题或建议,请通过以下方式联系: - 提交GitHub Issue - 发送邮件至:[邮箱地址] --- **注意**:本项目采用零知识架构,请妥善保管您的用户名和密码,一旦丢失将无法恢复数据。