# 引言

终于又重启博客了,平时开发折腾过程中遇到的一些问题,感觉不错的会发布到博客中。

但是有些文章如果存在隐私内容,或者不打算公开的话,就不能放在博客中了,但是一些文章挂在网页上又可以方便自己查看,于是折腾了下 Hexo 的文章加密

# 调研

以前用 wordpress 的时候,也折腾过类似的需求,由于是 动态网站,所以其实还是比较方便的,这一次使用了
Hexo 这个 静态博客 框架,说实话我都怀疑有没有可行的方案🤣🤣🤣

不过好在还是找到了一个 Hexo 插件 hexo-blog-encrypt 能够实现文章加密的需求

# 插件安装

使用如下命令安装

npm install hexo-blog-encrypt --save

该插件的使用也很方便,使用时只需要在文章的 Front-matter 添加 password 即可。

---
title: Hello World
date: 2022-05-13 21:18:02
password: 12345
---

下面展开讲一些比较实用的设置,更详细的可以查看官方文档。 D0n9X1n/hexo-blog-encrypt: Yet, just another hexo plugin for security.

# 全局加密配置

分别为每篇文章设置密码,虽然很灵活,但是配置或者修改起来非常麻烦。

好在,我们可以针对 tag 做全局统一配置,这样需要进行加密的文章,只需要引入指定的 tag 分类即可

  1. Hexo 主配置文件 _config.yml 中新增全局配置
# Security - hexo-blog-encrypt
encrypt:
  silent: true
  theme: xray
  abstract: 这是一篇加密文章,需要密码才能继续阅读。
  message: 当前文章暂不对外可见,请输入密码后查看!
  tags:
    - {name: private, password: hello}
  wrong_pass_message: 抱歉,您输入的密码错误,请检查后重新输入。

其中的 tag 部分可以定义多个,不同加密系列,采取不同的密码

  1. 文章头部 Front-matter 引入加密的 tag
---
title: Password Test
date: 2022-05-03 21:28:03
tags:
    - private
---

这样文章就被加密了,密码就是 private 标签对应的密码

  1. 全局加密豁免

可能有这样的情况,属于 private 标签下的某篇文章可能需要公开,不可能说把密码直接在描述信息中公开吧。

好在插件配置 优先级 为 文章Front-matter > _config.yml配置 > 默认配置

这时候,可以在 Front-matter 中对加密设置进行覆盖,只需要在使用 加密tag 的前提下,结合 password 来实现即可。在博客文章的头部添加 password 并设置为 "" 就能取消当前文章的加密

---
title: Password Test
date: 2022-05-03 21:28:03
tags:
    - private
password: ""
---
  1. 全局加密设置非全局密码

可能有如下场景,属于 private 标签下的某篇文章想要设置成不一样的密码。

还是利用配置的优先级在 Front-matter 中对加密设置进行覆盖即可,在博客文章的头部添加 password 并设置为 自定义密码 就可以使用 自定义密码 加密当前文章了


---
title: Password Test
date: 2022-05-03 21:28:03
tags:
    - private
password: "special"
---

# Shoka 主题适配

# 解密后目录不显示

为文章设置了 加密 后查看 之后,不经意间发现这些文章的目录在解密后却不显示了。

在插件的 github issues 中有相关问题的讨论 解密后目录不会更新・Issue #16

主要原因就是加密的时候, post.content 会变成加密后的串,所以原来的 TOC 生成逻辑就会针对加密后的内容。
所以这边我只能把原来的内容存进 post.origin 字段。

Shoka 主题的针对修改如下:

  1. 主题文件 themes/shoka/layout/_macro/sidebar.njk 找到 宏 render ,修改目录生成部分如下
<div class="inner">
     <!--modify begin-->
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

flechazo 微信支付

微信支付

flechazo 支付宝

支付宝

flechazo 贝宝

贝宝