功能简介#
本博客支持对文章中的部分内容进行 密码加密。加密区域在页面上显示为一个锁定状态的卡片,读者需要输入正确的密码才能查看完整内容。
技术特性#
- 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):
--------------------------------------------------操作要点:
- 输入密码(输入时不会显示字符,这是正常的)
- 再次输入密码确认
- 粘贴或输入你要加密的 Markdown 内容
- 按 Ctrl+D(macOS/Linux)结束输入
第三步:复制生成的 Shortcode#
加密完成后,脚本会输出类似这样的内容:
==================================================
加密完成!请将以下内容复制到你的 Markdown 文件中:
==================================================
{{< encrypt "base64编码的密文字符串..." >}}复制整行 {{< encrypt "..." >}} 这段代码。
第四步:粘贴到文章中#
打开你的文章 Markdown 文件,将复制的 shortcode 粘贴到需要加密的位置:
---
title: "我的文章"
---
这是公开可见的内容,所有人都能看到。
{{< encrypt "你复制的密文字符串" >}}
这是文章的其他公开内容。第五步:预览和发布#
启动本地预览确认效果:
hugo server在浏览器中打开文章页面,你应该能看到:
- 一个带锁形图标的加密卡片
- 密码输入框和「解密」按钮
- 输入正确密码后,解密内容以 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字节])