注意:本人已弃用本插件,改用hexo-blog-encrypt
提出问题
使用过$Hexo$搭建博客的应该都有为加密文章头疼过。
百度里面大多数人都是使用的$js$语句实现的加密功能。
然而那个加密功能有很多$bug$,包括:
search.xml
依然保留文章内容,可以使用搜索直接获取文章内容- 密码明文传输,直接查看网页源代码即可获取密码(本问题可以采用$md5$加密解决)
- 新标签页打开页面不用输入密码即可进入页面(本问题可以使用$location$定位解决)
- 源代码未加密,直接下载源代码去掉加密部分即可看到文章内容
有这么多的问题,特别是$1,4$条非常棘手,似乎就没有将网页源码加密以外的方法了。
解决方案
在这里推荐使用一个加密插件hexo-encrypt
,本人使用后强烈推荐。
其本人也描述了使用方法并提供了$demo$:传送门
使用方法
首先输入命令:npm install hexo-encrypt --save
等待安装完成后,修改博客配置文件_config.yml
。
在末尾添加:1
2encrypt:
password: 123456
这里的123456
为默认密码,即若文章加密并且未声明独立密码即可通过默认密码解锁文章。
然后在package.json
中修改插件的版本号,修改为"hexo-encrypt": "^0.2.0"
。
然后在每一篇文章的开头加入:1
2encrypt: true
enc_pwd: 123456
这里的enc_pwd
为独立密码,设定独立密码后文章不再使用默认密码解锁,改用独立密码解锁。
输入hexo s
即可查看效果。
注意若修改完插件或密码需要先hexo clean
清空缓存。
运行效果
测试了以上$4$个使用$js$的$bug$均未出错。
优化与自定义
解决deprecated错误
执行hexo s
后可能会出现下图错误。
原因是用到的插件版本太老,有的功能已被弃用。
解决方法是手动下载一个hexo-fs
,下载地址。
将\blog\node_modules\hexo-encrypt\node_modules
的hexo-fs
替换为下载文件。
然后修改\blog\node_modules\hexo-encrypt\package.json
与\blog\node_modules\hexo-encrypt\package-lock.json
,将所有hexo-fs
的版本号替换为下载的版本号(里面含有的下载链接也修改一下)(截止于本文发稿时版本号为0.2.2
)。
同样的也修改一下\blog\package.json
与\blog\package-lock.json
,替换其中hexo-encrypt
用到的hexo-fs
的版本号。
再次执行hexo s
后错误消失。
将输入文本框替换为密码框
找到\blog\node_modules\hexo-encrypt\lib\conf_post.js
,找到这一段代码:1
this.template = ' <input id="enc_pwd_input" type="text" style="' +
将其替换为:1
this.template = ' <input id="enc_pwd_input" type="password" style="' +
hexo clean
+hexo s
后即可看到效果。
自定义密码错误提示
找到\blog\node_modules\hexo-encrypt\lib\conf_post.js
,找到这一段代码:1
' document.getElementById("enc_error").innerHTML = "password error!"\n' +
将password error!
替换为你想要的提示。hexo clean
+hexo s
后即可看到效果。
汉化插件
找到\blog\node_modules\hexo-encrypt
打开源码随便汉化即可。hexo clean
+hexo s
后即可看到效果。