Skip to content

文章加密

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 属性

属性类型必填说明
passwordstring文章密码,设置后文章将被加密
passwordHintstring密码提示,显示在密码输入框上方

加密范围

内容处理方式
文章正文加密
赞助 / 分享块加密
许可证块加密
标题、元数据不加密
封面图不加密
评论区隐藏
目录 TOC解密后显示
RSS 输出仅标题和描述,不输出正文

会话缓存

  • 输入正确密码后,密码会缓存在浏览器 sessionStorage
  • 同一会话内刷新页面无需重复输入密码
  • 关闭浏览器后缓存自动清除,再次访问需要重新输入

技术细节

  • 加密算法: AES-256-GCM
  • 密钥派生: PBKDF2(SHA-256,100,000 次迭代)
  • 构建时加密: 使用 Node.js crypto 模块
  • 客户端解密: 使用浏览器原生 Web Crypto API,无第三方依赖
  • 支持 .md.mdx 格式

TIP

密码以明文写在 Front-matter 中,仅在构建时使用。构建产物中不包含密码原文,只有加密后的密文。

WARNING

加密安全性取决于密码强度。由于密文公开在页面源码中,弱密码理论上可被暴力破解。请使用足够复杂的密码。