如何使用文章加密功能

2026年8月5日 周三 211 字 1 分钟 -- 博客指南 教程, 加密, Hugo

功能简介#

本博客支持对文章中的部分内容进行 密码加密。加密区域在页面上显示为一个锁定状态的卡片,读者需要输入正确的密码才能查看完整内容。

技术特性#

  • AES-256-GCM 认证加密算法,安全性高
  • PBKDF2 密钥派生(100,000 次迭代),防止暴力破解
  • 基于浏览器原生 Web Crypto API,无需第三方 JS 库
  • 支持 Markdown 格式渲染

前置条件#

使用加密功能前,请确保已安装 Python 3 和 cryptography 库:

# 检查 Python 版本
python3 --version

# 安装 cryptography 库(仅需执行一次)
pip3 install cryptography

完整使用步骤#

第一步:编写明文内容#

先在任意编辑器中写好你要加密的 Markdown 内容,例如:

## 项目内部文档

这是一份内部技术文档,包含以下内容:

- 服务器地址:192.168.1.100
- 数据库密码:s3cret!@#
- 部署流程说明

> 请勿外传此文档

第二步:运行加密脚本#

在项目根目录下执行:

python3 scripts/encrypt.py

脚本会依次提示你:

==================================================
  Hugo 文章内容加密工具
==================================================

[✓] 使用 cryptography 库 (AES-256-GCM)

请输入加密密码:        ← 输入你想设置的密码(输入不可见)
请再次输入密码:        ← 再次输入确认

请输入要加密的内容 (输入完成后按 Ctrl+D):
--------------------------------------------------

操作要点:

  1. 输入密码(输入时不会显示字符,这是正常的)
  2. 再次输入密码确认
  3. 粘贴或输入你要加密的 Markdown 内容
  4. 按 Ctrl+D(macOS/Linux)结束输入

第三步:复制生成的 Shortcode#

加密完成后,脚本会输出类似这样的内容:

==================================================
  加密完成!请将以下内容复制到你的 Markdown 文件中:
==================================================

{{< encrypt "base64编码的密文字符串..." >}}

复制整行 {{< encrypt "..." >}} 这段代码。

第四步:粘贴到文章中#

打开你的文章 Markdown 文件,将复制的 shortcode 粘贴到需要加密的位置:

---
title: "我的文章"
---

这是公开可见的内容,所有人都能看到。

{{< encrypt "你复制的密文字符串" >}}

这是文章的其他公开内容。

第五步:预览和发布#

启动本地预览确认效果:

hugo server

在浏览器中打开文章页面,你应该能看到:

  1. 一个带锁形图标的加密卡片
  2. 密码输入框和「解密」按钮
  3. 输入正确密码后,解密内容以 Markdown 格式显示

确认无误后,正常提交推送到 GitHub 即可自动部署。


实际演示#

下面是一个加密区域的演示,密码为 demo123:

此内容已加密,请输入密码查看


常见问题#

Q: 密码可以修改吗?#

A: 不可以。密码在加密时确定,之后无法从密文中修改或找回。如需更换密码,需要用新密码重新加密内容。

Q: 忘记密码怎么办?#

A: 无法恢复。密码不存储在任何地方,遗忘密码意味着内容永久无法访问。建议将密码记录在安全的地方(如密码管理器)。

Q: 加密内容安全吗?#

A: 从技术角度看:

  • 使用 AES-256-GCM(军事级加密标准)
  • PBKDF2 密钥派生(100,000 次迭代)
  • 每次加密使用随机 salt 和 IV

但需注意:

  • 密文在 HTML 源码中可见(虽然是加密后的)
  • 安全性取决于密码强度,建议使用强密码
  • 这不是端到端加密,适合保护一般敏感内容

Q: 支持哪些 Markdown 语法?#

A: 解密后的内容支持以下 Markdown 语法:

  • 粗体、斜体、删除线
  • 行内代码 和代码块
  • 链接
  • 标题(h2-h4)
  • 无序列表、有序列表
  • 引用块
  • 分割线

Q: 可以加密整篇文章吗?#

A: 技术上可以,但不建议。更好的做法是:

  • 文章标题和摘要保持公开(方便读者了解文章主题)
  • 将敏感的具体内容放在加密区域内

快速参考#

Shortcode 语法#

{{< encrypt "密文字符串" >}}

加密脚本#

python3 scripts/encrypt.py

安装依赖#

pip3 install cryptography

密文格式#

base64url(salt[16字节] + iv[12字节] + AES-GCM密文 + 认证标签[16字节])
CC BY-NC-ND

本文采用 CC BY-NC-ND 4.0 协议进行许可。转载或引用须注明原作者及出处,不得用于商业用途,不得演绎。

署名 非商业性使用 禁止演绎