文章客户端加密
约 484 字大约 2 分钟
2025-09-01
概述
主题使用了 bcryptjs
用于密码的哈希处理,以及 crypto-js
用于内容的对称加密。
工作流程
这一阶段发生在访客的浏览器里,当他们访问那个被加密的页面时:
1. 用户交互
访客首先看到的不是文章,而是一个密码输入界面。
2. 客户端验证与解密
当访客输入密码并点击"解锁"后,页面内嵌的 JavaScript 脚本会执行以下操作:
验证密码
脚本会先用 bcryptjs
将访客输入的密码进行同样的哈希计算,然后与页面中预存的那个哈希值进行比对。如果二者匹配,证明密码正确。这是为了快速验证密码,避免用错误的密码去尝试解密,浪费计算资源。
解密内容
密码验证通过后,脚本会使用访客刚刚输入的明文密码(它只存在于浏览器内存中,不会被发送到任何地方)作为密钥,调用 crypto-js
来解密页面中存储的文章密文。
动态渲染
一旦密文被成功解密,脚本就会将还原出的、包含完整格式的 HTML 内容,动态地插入到页面的相应容器中。
3. 完成展示
至此,访客才能看到文章的真实内容。通过这种方式,我们成功地在没有后端的情况下,模拟出了一套安全的"验证-解密-渲染"流程,实现了对静态内容的有效保护。
使用方法
在文章的 Front Matter 中添加以下配置:
---
title: '这是一篇加密文章'
encrypted: true
password: 'your-secret-password'
---
这样定义后就可以实现为文章设定不可逆的文章加密,只有输入正确的密码才能查看文章内容。