乐趣区

关于后端:给Hexo博客文章加密

有的时候博客内容会有变动,首发博客是最新的,其余博客地址可能会未同步, 认准 https://blog.zysicyj.top

首发博客地址

原文地址


这是个啥

  • 首先, 这是 Hexo 生态圈中 最好的 博客加密插件~
  • 你可能须要写一些私密的博客, 通过明码验证的形式让人不能随便浏览.
  • 这在 wordpress, emlog 或是其余博客零碎中都很容易实现, 然而 hexo 除外. :(
  • 为了解决这个问题, 让咱们有请 “hexo-blog-encrypt”.

个性

  • 一旦你输出了正确的明码, 它将会被存储在本地浏览器的 localStorage 中. 按个按钮, 明码将会被清空. 若博客中有脚本, 它将会被正确地执行.
  • 反对按标签加密.
  • 所有的外围性能都是由原生的 API 所提供的. 在 Node.js 中, 咱们应用 Crypto. 在浏览器中, 咱们应用 Web Crypto API.
  • PBKDF2, SHA256 被用于散发密钥, AES256-CBC 被用于加解密, 咱们还应用 HMAC 来验证密文的起源, 并确保其未被篡改.
  • 咱们宽泛地应用 Promise 来进行异步操作, 以此确保线程不被阻塞.
  • 加密页面多主题反对, 当初曾经反对的主题有 [default, xray], 更多的主题正在开发中.
  • 过期的浏览器将不能失常显示, 因而, 请降级您的浏览器.

在线演示

  • 点击 Demo Page, 所有的明码都是 hello.

装置

  • npm install --save hexo-blog-encrypt
  • yarn add hexo-blog-encrypt (须要) Yarn)

疾速应用

  • 将 “password” 字段增加到您文章信息头就像这样.
---
title: Hello World
date: 2016-03-30 21:18:02
password: hello
---
  • 再应用 hexo clean && hexo g && hexo s 在本地预览加密的文章.

设置优先级

文章信息头 \> 按标签加密

高级设置

文章信息头

---
title: Hello World
tags:
- 作为日记加密
date: 2016-03-30 21:12:21
password: mikemessi
abstract: 有货色被加密了, 请输出明码查看.
message: 您好, 这里须要明码.
wrong_pass_message: 道歉, 这个明码看着不太对, 请再试试.
wrong_hash_message: 道歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
---

_config.yml

示例

# Security
encrypt: # hexo-blog-encrypt
  abstract: 有货色被加密了, 请输出明码查看.
  message: 您好, 这里须要明码.
  tags:
  - {name: tagName, password: 明码 A}
  - {name: tagName, password: 明码 B}
  wrong_pass_message: 道歉, 这个明码看着不太对, 请再试试.
  wrong_hash_message: 道歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.

对博文禁用 Tag 加密

只须要将博文头部的 password 设置为 "" 即可勾销 Tag 加密.

Example:

---
title: Callback Test
date: 2019-12-21 11:54:07
tags:
    - A Tag should be encrypted
password: ""
---

Use a "" to diable tag encryption. 

配置优先级

文章信息头 \> _config.yml (站点根目录下的) \> 默认配置

对于 Callback 函数

在局部博客中, 解密后局部元素可能无奈失常显示或者体现, 这属于已知问题. 目前的解决办法是通过自行查阅本人的博客中的代码, 理解到在 onload 事件产生时调用了哪些函数, 并将这些函数筛选后写入到博客内容中. 如:

---
title: Callback Test
date: 2019-12-21 11:54:07
tags:
    - Encrypted
---

This is a blog to test Callback functions. You just need to add code at the last of your post like following:

It will be called after the blog decrypted.

<script>
    // 增加一个 script tag 与代码在文章开端.
    alert("Hello World");
</script> 

例子在: Callback 例子.

解密后的触发事件

感激 @f-dong, 咱们当初会在解密实现后触发一个 hexo-blog-decrypt 事件, 你们能够编写 callback 来监听该事件.

// trigger event
var event = new Event('hexo-blog-decrypt');
window.dispatchEvent(event); 

对 TOC 进行加密

如果你有一篇文章应用了 TOC,你须要批改模板的局部代码。这里用 landscape 作为例子:

  • 你能够在 hexo/themes/landscape/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 %> 

禁用 Log

If you want to disable the logging, you can add a silent property in _config.yml and set it to true. 如果你想要禁止应用 Log, 你能够在 _config.yml 中减少一个 silent 属性, 并将其设置为 true.

# Security
encrypt: # hexo-blog-encrypt
  silent: true

这样就会禁止如 INFO hexo-blog-encrypt: encrypting "{Blog Name}" based on Tag: "EncryptedTag". 的日志.

加密主题

之前, 咱们尝试应用 template 关键字来让用户能批改本人的主题. 起初发现真不是一个好主见. 所以咱们当初引入了主题: theme 关键字.

你能够简略的应用 theme_config.yml 里或者文章头, 如下:

文章信息头

---
title: Hello World
tags:
- 作为日记加密
date: 2016-03-30 21:12:21
password: mikemessi
abstract: 有货色被加密了, 请输出明码查看.
message: 您好, 这里须要明码.
theme: xray
wrong_pass_message: 道歉, 这个明码看着不太对, 请再试试.
wrong_hash_message: 道歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.
---

_config.yml

示例

# Security
encrypt: # hexo-blog-encrypt
  abstract: 有货色被加密了, 请输出明码查看.
  message: 您好, 这里须要明码.
  tags:
  - {name: tagName, password: 明码 A}
  - {name: tagName, password: 明码 B}
  theme: xray
  wrong_pass_message: 道歉, 这个明码看着不太对, 请再试试.
  wrong_hash_message: 道歉, 这个文章不能被校验, 不过您还是能看看解密后的内容.

本文由 mdnice 多平台公布

退出移动版