Skip to content

纯静态前端解密

现在博客支持 构建期加密、前端解密 的内容块:站点仍然是纯静态的,服务器不会参与解密,只有拿到正确口令的浏览器才能看到正文。

解密成功后,口令只会保留在当前页面会话的内存中,不会写入浏览器本地存储。站内导航期间可以自动解锁;刷新页面后需要重新输入,点击“重新上锁”会立即清除内存缓存。

推荐写法:secret 映射

先在本地或部署环境提供口令映射:

  • 本地开发:创建 .vitepress/encryption-secrets.local.json
  • CI / Vercel:设置 BLOG_ENCRYPTION_SECRETS(JSON 字符串)或 BLOG_ENCRYPTION_SECRETS_FILE

示例:

json
{
  "friends-only": "very-strong-passphrase"
}

然后在 Markdown 里写:

md
::: encrypt secret="friends-only" title="朋友可见附录" hint="提示文案可选"
这里放正常的 Markdown 正文。

- 列表
- 公式:$e^{i\\pi} + 1 = 0$
- 普通内部引用:[[给博客做了一次不小的翻新]]
:::

临时写法:直接写 password

如果仓库本身就是私有的,或者只是想做一个公开演示,也可以直接写:

md
::: encrypt password="demo-static-2026" title="演示密文"
这段内容会在构建时被 AES-GCM 加密。
:::

直接把口令写进仓库并不适合真正的私密内容;正式使用时请优先走 secret="..." + 本地/环境变量映射。

在线演示

演示口令:demo-static-2026

演示密文

这段内容已经在构建阶段加密,站点仍然保持纯静态部署;只有在当前浏览器里输入正确口令后才会解密。

提示:年份就在口令最后

当前边界

  • Vue 组件类语法不建议放进加密块里
  • 加密块内部的双向引用预览会退化成普通链接
  • 整篇文章如果都想加密,直接把正文整体包进 ::: encrypt ... 即可

Last updated: