文章加密
Firefly 支持对文章进行密码保护。加密文章在构建时使用 AES-256-GCM 算法加密,页面源码中不包含任何明文内容。访客需要输入正确密码后,浏览器通过 Web Crypto API 在本地完成解密。
基本用法
在文章的 Front-matter 中添加 password 字段即可启用加密:
yaml
---
title: 私密文章
published: 2025-01-01
password: "your-password"
---
这里的所有内容都会被加密。密码提示
可选添加 passwordHint 字段,为访客提供密码提示:
yaml
---
title: 私密文章
published: 2025-01-01
password: "your-password"
passwordHint: "我的生日"
---Front-matter 属性
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
password | string | 否 | 文章密码,设置后文章将被加密 |
passwordHint | string | 否 | 密码提示,显示在密码输入框上方 |
加密范围
| 内容 | 处理方式 |
|---|---|
| 文章正文 | 加密 |
| 赞助 / 分享块 | 加密 |
| 许可证块 | 加密 |
| 标题、元数据 | 不加密 |
| 封面图 | 不加密 |
| 评论区 | 隐藏 |
| 目录 TOC | 解密后显示 |
| RSS 输出 | 仅标题和描述,不输出正文 |
会话缓存
- 输入正确密码后,密码会缓存在浏览器
sessionStorage中 - 同一会话内刷新页面无需重复输入密码
- 关闭浏览器后缓存自动清除,再次访问需要重新输入
技术细节
- 加密算法: AES-256-GCM
- 密钥派生: PBKDF2(SHA-256,100,000 次迭代)
- 构建时加密: 使用 Node.js
crypto模块 - 客户端解密: 使用浏览器原生 Web Crypto API,无第三方依赖
- 支持
.md和.mdx格式
TIP
密码以明文写在 Front-matter 中,仅在构建时使用。构建产物中不包含密码原文,只有加密后的密文。
WARNING
加密安全性取决于密码强度。由于密文公开在页面源码中,弱密码理论上可被暴力破解。请使用足够复杂的密码。
