跳转到内容

加密文章

ShokaX 支持对文章内容进行加密保护。加密在构建时完成,密码不会发送到服务器——所有解密操作在浏览器本地完成。

在文章 frontmatter 中添加两个字段:

src/posts/private-notes.md
---
title: 私人笔记
date: 2026-06-01
encrypted: true
password: "my-secret-key"
---
这是一篇加密文章的内容,构建后会被加密。
在浏览器中需要输入正确密码才能查看。

核心字段说明:

字段类型说明
encryptedboolean必填,设为 true 开启加密
passwordstring必填,加密密码(构建时使用)

当文章标记为 encrypted: true 后:

  1. 文章列表页会显示密码锁图标 :lock:,标题正常展示
  2. 点击进入文章页后,不会显示正文内容
  3. 页面会弹出一个密码输入框
  4. 输入正确密码后,正文内容即时解密显示

ShokaX 使用浏览器原生的 Web Crypto API 进行加密:

  • 算法:AES-GCM-256
  • 密钥派生:PBKDF2(100,000 次迭代,SHA-256)
  • 加密时机:构建时(Node.js / Bun 环境)
  • 解密时机:浏览器运行时(客户端)
密码 → PBKDF2 派生密钥 → AES-GCM 加密文章内容
加密后的内容嵌入 HTML
浏览器输入密码 → PBKDF2 派生密钥 → AES-GCM 解密

加密文章在未解密前,侧边栏目录(TOC)也会被隐藏。输入密码解密后,TOC 自动出现。这确保了目录也不会泄露文章结构信息。

限制说明
搜索引擎加密文章内容不会被搜索引擎索引(仅标题可见)
RSS加密文章不会出现在 RSS feed 中
Pagefind 搜索加密文章正文不会被搜索索引
静态生成文章页面正常生成,但正文以密文形式嵌入

Q: 可以为不同文章设置不同的密码吗?

Section titled “Q: 可以为不同文章设置不同的密码吗?”

可以。每篇文章的 password 字段是独立的,互不影响。

可以。修改 password 字段后重新构建,文章会用新密码重新加密。

目前没有密码找回机制。密码仅存在于你的配置文件中,请妥善保管。

加密使用高效的 AES-GCM 算法,对单篇文章的影响可忽略不计。即使是大量加密文章,构建时间增加也很有限。

津 ICP 备2022001375 号
津公网安备 12011402001353 号