Skip to content

Commit 5fac795

Browse files
committed
feat(encryption): 实现自动化文件加密功能
- 新增 .env.example 示例,支持通过环境变量配置加密密码 - 修改加密说明文档,新增自动化加密操作说明,推荐使用 .env.local 文件设置密码 - 将示例加密文档内容统一加密,防止明文泄露 - 在 package.json 中新增 predev、prebuild 脚本钩子,自动执行加密脚本 - encrypt.js 支持自动加载 .env.local 文件读取加密密码 - 优化 encrypt.js 配置解析逻辑,支持多种格式的 encryption 配置读取 - 增加自动检查未加密文件的功能,避免重复加密 - 支持环境变量模式下自动使用密码,免交互输入 - 增强用户交互体验,密码输入需确认且非空验证 - 提示所有文件已加密时自动退出,确保高效构建流程
1 parent 5ed75cf commit 5fac795

9 files changed

Lines changed: 242 additions & 317 deletions

File tree

.env.example

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# PPage 环境变量配置示例
2+
# 复制此文件为 .env.local 并填写实际值
3+
4+
# ====================================
5+
# 加密功能配置
6+
# ====================================
7+
8+
# 加密密码(用于自动化加密流程)
9+
# 如果设置了此变量,npm run dev 和 npm run build 会自动加密
10+
# 如果未设置,将在首次运行时提示输入密码
11+
# PPAGE_ENCRYPT_PASSWORD=your_encryption_password_here
12+
13+
# ====================================
14+
# 部署配置
15+
# ====================================
16+
17+
# 部署基础路径(如果需要覆盖配置文件中的设置)
18+
# VITE_BASE_PATH=/
19+
20+
# ====================================
21+
# 使用说明
22+
# ====================================
23+
24+
# 1. 复制此文件:
25+
# cp .env.example .env.local
26+
27+
# 2. 设置加密密码:
28+
# 取消注释 PPAGE_ENCRYPT_PASSWORD 并设置密码
29+
30+
# 3. .env.local 文件会被 git 忽略,不会提交到仓库
31+
32+
# ====================================
33+
# 安全提示
34+
# ====================================
35+
36+
# ⚠️ 请勿将 .env.local 提交到 git
37+
# ⚠️ 请勿在 .env.example 中填写真实密码
38+
# ⚠️ 使用强密码(至少12位,包含大小写字母、数字和特殊字符)

ENCRYPTION_QUICKSTART.md

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,27 @@ encryption:
2626

2727
**现在这些文件还是明文,你可以打开查看!**
2828

29-
### 第3步:加密内容 🔒
29+
### 第3步:设置加密密码 🔑
3030

31-
运行加密命令:
31+
有两种方式设置密码:
32+
33+
#### 方式 A:使用 .env 文件(推荐,自动化)
34+
35+
```bash
36+
# 1. 复制环境变量配置文件
37+
cp .env.example .env.local
38+
39+
# 2. 编辑 .env.local,设置密码
40+
echo 'PPAGE_ENCRYPT_PASSWORD=demo2025' > .env.local
41+
```
42+
43+
✨ **优势**:
44+
45+
- 自动加密,无需每次输入密码
46+
- `npm run dev` 和 `npm run build` 会自动执行加密
47+
- `.env.local` 不会提交到 git,安全
48+
49+
#### 方式 B:手动运行加密脚本
3250

3351
```bash
3452
npm run encrypt
@@ -75,6 +93,23 @@ npm run encrypt
7593
npm run dev
7694
```
7795

96+
**自动化魔法**
97+
98+
如果你设置了 `.env.local`,系统会:
99+
100+
1. 自动检查文件是否已加密
101+
2. 自动加密未加密的文件
102+
3. 启动开发服务器
103+
104+
如果没有设置 `.env.local`,会提示你输入密码,然后继续。
105+
106+
💡 **提示**:如果所有文件已加密,会显示:
107+
108+
```
109+
✨ 所有文件已加密,无需重复加密
110+
总计: 4 个文件
111+
```
112+
78113
### 第5步:体验加密内容 🎯
79114

80115
1. 打开浏览器访问:http://localhost:5173

content/protected/meeting-minutes.md

Lines changed: 5 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -5,93 +5,12 @@ description: '团队内部会议记录'
55
tags:
66
- '会议'
77
- '内部'
8+
encrypted: true
9+
encryptedAt: '2026-01-08T11:43:11.696Z'
810
---
911

10-
# 内部会议纪要
12+
<!-- ENCRYPTED_CONTENT -->
1113

12-
## 会议信息
14+
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
1315

14-
- **日期**: 2025年1月8日
15-
- **时间**: 14:00 - 16:00
16-
- **参会人员**: [保密]
17-
- **会议类型**: 项目评审
18-
19-
## 议程
20-
21-
### 1. 项目进展汇报
22-
23-
**已完成**:
24-
25-
- 加密功能实现
26-
- 前端界面优化
27-
- 文档编写完成
28-
29-
🔄 **进行中**:
30-
31-
- 性能优化
32-
- 测试用例编写
33-
34-
📋 **待开始**:
35-
36-
- 用户反馈收集
37-
- 功能迭代规划
38-
39-
### 2. 技术讨论
40-
41-
#### 加密方案选择
42-
43-
讨论了多种加密方案:
44-
45-
| 方案 | 优点 | 缺点 | 决策 |
46-
| ----------- | ------------------ | -------------- | --------- |
47-
| AES-256-GCM | 安全性高,标准算法 | 计算开销 | ✅ 采用 |
48-
| ChaCha20 | 性能好 | 浏览器支持有限 | ❌ 不采用 |
49-
| RSA | 非对称加密 | 不适合大数据 | ❌ 不采用 |
50-
51-
#### 用户体验优化
52-
53-
讨论了以下改进点:
54-
55-
1. **密码输入界面**
56-
- 设计更美观的对话框
57-
- 添加密码强度提示
58-
- 支持记住密码功能
59-
60-
2. **性能优化**
61-
- 使用 Web Worker 解密
62-
- 缓存解密结果
63-
- 懒加载加密内容
64-
65-
3. **错误处理**
66-
- 友好的错误提示
67-
- 重试机制
68-
- 日志记录
69-
70-
### 3. 决策事项
71-
72-
**决策1**: 采用 AES-256-GCM 加密算法
73-
**理由**: 安全性高,浏览器支持良好
74-
75-
**决策2**: 密码使用会话级缓存
76-
**理由**: 平衡安全性和用户体验
77-
78-
**决策3**: 加密内容不参与搜索和图谱
79-
**理由**: 保护隐私,避免信息泄露
80-
81-
## 行动项
82-
83-
- [ ] @张三: 完成性能测试(截止:1月10日)
84-
- [ ] @李四: 编写用户文档(截止:1月12日)
85-
- [ ] @王五: 收集用户反馈(截止:1月15日)
86-
87-
## 下次会议
88-
89-
- **时间**: 2025年1月15日 14:00
90-
- **议题**: 功能迭代规划
91-
92-
---
93-
94-
**保密级别**: 内部使用
95-
**分发范围**: 项目组成员
96-
97-
**备注**: 本会议纪要包含敏感信息,请勿外传。
16+
<!-- /ENCRYPTED_CONTENT -->

content/protected/private-diary.md

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,12 @@ description: '我的私密日记'
55
tags:
66
- '日记'
77
- '个人'
8+
encrypted: true
9+
encryptedAt: '2026-01-08T11:43:11.709Z'
810
---
911

10-
# 个人日记
12+
<!-- ENCRYPTED_CONTENT -->
1113

12-
## 2025-01-08
14+
4hKR3faRFRfdMsKFuW4CvpTe3EwyC/IQkqi5wWeZcvD0KV6izrUOLpXOsfjR9HbuQsZridDJSjmsVdeGGHb/dbANsyFNhqSKWj6XUWIH/M+vL0hpd9BQ4aVMay9FcbeMi0VCR+C8cTwo3uVQBpYpPJoxOKac4842E1MpaQRlutfVZf1CeAoufJOgbzuptDo5GsyzTKenHbMkJm5E1YtNLoqDsk2y+mN75ZHiXLnSprtecfHjciCeTrOBvkp6uSDuvSGEmm2JO/kN5fIACxb1flPobKvtKvjsxsNrcabILIBG+WiguKSlT4nYK4YHSC4r7ojpQZ8Ygb2tLz2c7lLkgf4Itmfa0MmurhqvmMT4EO159Cs+UwYpmhire2v9i3onBhLIMpQkaTFJYO/ktEfOvZbNvLpVjY90bcYPUuK/LZxm+nUnr0LpRDmWAMA+hRUe7Mk3fg532e/jQvZc/VPKYS8cONtghDH27xbmGCaLu4L56Znhkk/bi0I/viMmRA441Qyok3kygo8TVWvO4jXIEtIQFIdTZn/RzhZl4Ex30jbGaAVULkMtx4Ga7P7EwEJlaoQStOlLuoEo1IN0YRKmFTjs+A1B8ivxDjByoWQNx2UocscYQeCDBrns1b/Cjep86e/TauVg/sZORd0NasK4dxEmwHHgH96BMP3MppyvmLHDsbfG6MmlXR9mNyUwEATwo0I157CNQok5DoC0yDdI7vY5oKuU891pmLd1elC5Mlz1hLU63uQwJWmypygO/tEn2n9KJhoMOpDq/1p2Dsrdtm+SThw7oaE2l22bntgLnJgsUcrLg58FQQ9A0MFj/CQbaHbb/4h/plui7JyO5LYeW2PlKdzSdJN6xraxiASYdV5VaSgyuMa/w/0bBueUx79A76qXYPPUbHqe0OWolUEfBZrtqoEPX0ukdEAuslfLTmwf1Mi2I7Cz4Uy2t+P4S2Ias3tgodZqU0HKSPyGPxM9yzqeSCLIVX/ly6ZoK6hynYY3bMk5AnylM5L8snxdZ33fJXs9F3xmY0jELulrz9NqXD5hiiWWXaMQ6+n/bTSIetJoJC27xb5YGMVTNheFA7JF46tFpVwHux4g1URA4raYvQhb7nT/s740r1yB9dreVrwy6FquaTZ+9nqToGoqiufzm+JqmDtu4L/izrseVDNwbgPcUoSB
1315

14-
今天是个特别的日子,我终于完成了一个重要的项目。
15-
16-
### 早上
17-
18-
☕ 早上8点起床,喝了一杯咖啡,开始规划今天的工作。
19-
20-
### 下午
21-
22-
💻 下午专注于编码,实现了加密功能。这个功能非常重要,因为:
23-
24-
1. 可以保护私密内容
25-
2. 即使代码公开也很安全
26-
3. 用户体验良好
27-
28-
### 晚上
29-
30-
🌙 晚上回顾了一天的工作,感觉很有成就感。
31-
32-
## 私密想法
33-
34-
这里记录一些只想自己知道的想法:
35-
36-
- 对未来的规划
37-
- 个人的梦想
38-
- 需要保密的想法
39-
40-
---
41-
42-
**提示**:这是加密内容示例,只有输入正确密码才能查看。
16+
<!-- /ENCRYPTED_CONTENT -->

content/protected/technical-notes.md

Lines changed: 5 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -7,105 +7,12 @@ tags:
77
- '研究'
88
- '保密'
99
category: '技术文档'
10+
encrypted: true
11+
encryptedAt: '2026-01-08T11:43:11.717Z'
1012
---
1113

12-
# 技术笔记(保密)
14+
<!-- ENCRYPTED_CONTENT -->
1315

14-
## 项目架构设计
16+
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
1517

16-
### 核心思路
17-
18-
这个项目采用了一些独特的设计思路:
19-
20-
```mermaid
21-
graph TD
22-
A[用户访问] --> B{内容类型}
23-
B -->|公开内容| C[直接显示]
24-
B -->|加密内容| D[密码验证]
25-
D -->|密码正确| E[解密并显示]
26-
D -->|密码错误| F[提示重试]
27-
```
28-
29-
### 关键技术点
30-
31-
#### 1. 加密算法
32-
33-
- **算法**: AES-256-GCM
34-
- **密钥派生**: PBKDF2 (100,000次迭代)
35-
- **随机因子**: 每次加密使用新的盐值和IV
36-
37-
```javascript
38-
// 示例代码(仅供参考)
39-
const encrypted = encryptContent(content, password)
40-
const decrypted = decryptContent(encrypted, password)
41-
```
42-
43-
#### 2. 前端解密
44-
45-
使用 Web Crypto API 实现浏览器端解密:
46-
47-
```javascript
48-
// 浏览器环境解密
49-
const key = await deriveKey(password, salt)
50-
const decrypted = await crypto.subtle.decrypt(
51-
{ name: 'AES-GCM', iv: iv },
52-
key,
53-
encryptedData
54-
)
55-
```
56-
57-
#### 3. 安全考虑
58-
59-
- ✅ 密码不存储在代码中
60-
- ✅ 加密文件可以安全提交到Git
61-
- ✅ 即使仓库公开,内容也无法被解密
62-
- ✅ 密码只在会话期间缓存
63-
64-
## 实现难点
65-
66-
### 难点1: 浏览器兼容性
67-
68-
Web Crypto API 需要 HTTPS 环境或 localhost。
69-
70-
**解决方案**:
71-
72-
- 开发环境使用 localhost
73-
- 生产环境强制 HTTPS
74-
75-
### 难点2: 性能优化
76-
77-
解密操作需要一定的计算时间。
78-
79-
**优化措施**:
80-
81-
- 使用 SessionStorage 缓存密码
82-
- 异步解密,显示加载状态
83-
- 优化 PBKDF2 迭代次数
84-
85-
### 难点3: 用户体验
86-
87-
如何让密码输入体验更好?
88-
89-
**改进点**:
90-
91-
- 美观的模态对话框
92-
- 密码显示/隐藏切换
93-
- 清晰的错误提示
94-
- 记住密码(会话级别)
95-
96-
## 未来改进方向
97-
98-
1. **多密码支持**: 不同文件夹使用不同密码
99-
2. **密码提示**: 提供密码提示功能
100-
3. **密码强度检查**: 建议用户使用强密码
101-
4. **批量操作**: 支持批量加密/解密
102-
103-
## 内部资料
104-
105-
以下是一些敏感的技术资料和配置信息...
106-
107-
(此处省略具体内容)
108-
109-
---
110-
111-
**注意**: 本文档包含敏感技术信息,请勿分享给未授权人员。
18+
<!-- /ENCRYPTED_CONTENT -->

0 commit comments

Comments
 (0)