对 Hexo 博客文章进行加密

写在前面

  • 有时候我们可能需要写一些私密的博客,通过密码验证的方式让人不能随意浏览。
  • 这在wordpress,emlog或其他博客系统中都很容易实现,然而hexo除外。:(
  • 为了解决这个问题,我们需要安装“ hexo-blog-encrypt”扩展。

特性

  • 一旦你输入了正确的密码,它就会被存储在本地浏览器的localStorage中。按个按钮,密码将会被清空。若博客中有脚本,它将被正确地执行。
  • 支持按标签加密。
  • 所有的核心功能都是由原生的API所提供的。在Node.js中,我们使用Crypto。在浏览器中,我们使用Web Crypto API。
  • PBKDF2,SHA256被用作复制密钥,AES256-CBC被用作加解密,我们还使用HMAC来验证密文的来源,并确保其纠正。
  • 广泛地使用Promise来进行异步操作,从而确保线程不被杜塞。
  • 过时的浏览器将无法正常显示,因此,请升级您的浏览器。

安装

npm install --save hexo-blog-encrypt

快速使用

  • 将“ password”添加到您的文章信息头就像这样
title: Hello World
date: 2020-03-13 21:12:21
password: muyiio
---

按标签加密

  • 修改文章信息头如下:
title: Hello World
tags:
- 加密文章tag
date: 2020-03-13 21:12:21
password: muyiio
abstract: 这里有东西被加密了需要输入密码查看哦
message: 您好这里需要密码
wrong_pass_message: 抱歉这个密码看着不太对请再试试
wrong_hash_message: 抱歉这个文章不能被纠正不过您还是能看看解密后的内容
---
  • 对博客根目录_config添加如下字段:
# 安全
encrypt: # hexo-blog-encrypt
  abstract: 这里有东西被加密了,需要输入密码查看哦。
  message: 您好, 这里需要密码.
  tags:
  - {name: tagName, password: 密码A}
  - {name: tagName, password: 密码B}
  template: <div id="hexo-blog-encrypt" data-wpm="{{hbeWrongPassMessage}}" data-whm="{{hbeWrongHashMessage}}"><div class="hbe-input-container"><input type="password" id="hbePass" placeholder="{{hbeMessage}}" /><label>{{hbeMessage}}</label><div class="bottom-line"></div></div><script id="hbeData" type="hbeData" data-hmacdigest="{{hbeHmacDigest}}">{{hbeEncryptedData}}</script></div>
  wrong_pass_message: 抱歉, 这个密码看着不太对, 请再试试.
  wrong_hash_message: 抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.

对 TOC 文章进行加密

如果您有一篇文章使用了TOC,您需要修改模板的部分代码。这里以matery主题作为示例:

  • 在hexo/themes/matery/layout/_partial/article.ejs找到article.ejs。
  • 然后找到<%post.content%>这段代码,通常在30行左右。
  • 使用如下的代码来替代它:
<% if(post.toc == true){ %>
  <div id="toc-div" class="toc-article" <% if (post.encrypt == true) { %>style="display:none" <% } %>>
    <strong class="toc-title">Index</strong>
      <% if (post.encrypt == true) { %>
        <%- toc(post.origin, {list_number: true}) %>
      <% } else { %>
        <%- toc(post.content, {list_number: true}) %>
      <% } %>
  </div>
<% } %>
<%- post.content %>

声明

本文转载自作者MikeCoder的hexo-blog-encrypt项目,对有些地方略有修改。

项目地址:github.com/MikeCoder/he

发现这个还是挺好玩的~

编辑于 2021-04-12 20:57