hugo文章加密详细教

slug
hugo-text
status
Published
tags
hexo
summary
hexo
type
Post
hugo添加文章加密的几种方法

一、简单加密

LoveIt主题

\themes\LoveIt\layouts\posts\single.html 拷贝到\layouts\posts\single.html ,打开拷贝后的文件,在{{- $params := .Scratch.Get "params" -}} 的下一行添加如下代码:
{{- $password := $params.password | default "" -}}
    {{- if ne $password "" -}}
		<script>
			(function(){
				if({{ $password }}){
					if (prompt('请输入文章密码') != {{ $password }}){
						alert('密码错误!');
						if (history.length === 1) {
							window.opener = null;
							window.open('', '_self');
							window.close();
						} else {
							history.back();
						}
					}
				}
			})();
		</script>
    {{- end -}}
 

hugo-theme-stack主题 LeaveIt主题也类似

在themes\hugo-theme-stack\layouts_\default目录修改single.html文件,在{{ partialCached "footer/footer" . }} 上面添加代码
<div class="post-password">
        {{ if ( .Params.password | default "" ) }}
        <script>
			(function(){
                if (prompt('请输入文章密码') != {{ .Params.password }}){
						alert('密码错误!');
						if (history.length === 1) {
							window.opener = null;
							window.open('', '_self');
							window.close();
						} else {
							history.back();
						}
					}
			})();
        </script>
        {{ end }}
    </div>
 
之后只要在文章的头部加上password 属性即可进行加密,只有输入了正确密码才能打开文章,否则会回退到之前的页面。用法如下
---
title: 文章加密
password: 888
---
 
这个加密的文章密码假设置为888
打开文章会要求输入密码,输入后就可以浏览文章了
这种加密比较简单,适合对安全性没有太大要求的朋友,另外每次刷新网页都需要输入密码,有点麻烦。

二、插件加密

 
插件加密有两种
一种是hugo-encrypt
 
一种是hugo-encryptor
 
我们这里介绍hugo-encryptor的具体使用方法
windows下安装pycrypto比较困难,本地电脑又不想安装linux,所以我们选择到girhub的Actions自动编译里面安装。
 
我们先在本地电脑搭建好huog,安装主题,修改和完善主题
把hugo-encryptor下载解压
把shortcodes文件夹复制的blog的layouts目录
把requirements.txt和hugo-encryptor.py复制到blog的根目录
修改hugo-encryptor.py文件 (如果不修改会出现提交密码没有反应)
将src="/decrypt.js”修改为
这样就不用每次都复制decrypt.js到博客的public目录里面了,
 
再到blog根目录建一个文件夹 .github/workflows
在文件夹里面建立一个main.yml 文件 文件里面的代码如下
 
name: Hugo Build and Deploy
on:
  push:
    branches:
      - main
jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1  # v2 does not have submodules option now
        with:
          submodules: true
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: latest # 应用最新的hugo
          extended: true # 我的主题需要应用hugo-extende
      - name: requirements.txt
        run:  pip install -r requirements.txt
      
      - name: Build
        run: hugo --gc --minify
      - name: chmod +x      
        run: chmod +x hugo-encryptor.py
      - name: pycryptodome
        run: pip install pycryptodome
      - name: hugo-encryptor.py
        working-directory: ./
        run: python3 hugo-encryptor.py
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} #这里在repo settings里填入SSH私钥
          external_repository: xxxxxx/888 # <- 改成自己的 user github page
          publish_dir: ./public # <- 指定成品放置文件夹
          publish_branch: gh-pages # <- 远端repo目标分支
 
 
再到GitHub里面设置和本地的关联
建两个仓库,一个hugo1,一个hugo2, hugo1设置私密,仓库2选择公开,如果hugo用https://vercel.com/部署,也可以私密。
建立本地和你的github的关联
点击 New SSH key
Tlite随意,内容添加你本地生成的 id_rsa.pub 里面的内容
建立本地和hugo1直接的关联
在仓库里面点击settings/secrets/actions,点击New repository secret ,Name里面输入 ACTIONS_DEPLOY_KEY (这个名称必须和前面main.yml里面的代码保存一致)
里面填写 你的 id_rsa里面的内容。
在hugo1仓库页面,点击 . (就是一个点哈)。 把本地的blog根目录的里面文件全部拖拽到hugo1,点击回车后再点勾,就会将本地blog里面的文件全部上次到hugo1的仓库,稍等一分钟,应该就能在hugo2里面看到部署好的内容了,如果出现差错,可以到hugo1里面的Actions检查,看下是哪行代码失败,再进行适当调整。
一切顺利的话,就好hugo里面绑定域名。就可以访问了
我习惯用vercel,所以在vercel里面直接拉取hugo2的内容,再绑定域名就可以了。
 
安装好插件后,文章加密的方法就简单了
---
title: "An Encrypted Post"
---

Some text is required to be placed here.

<!--more-->

{{% hugo-encryptor "PASSWORD" %}}

# You cannot see me unless you've got the password!

This is the content you want to encrypt!

**Do remember to close the `hugo-encryptor` shortcodes tag:**

{{% /hugo-encryptor %}}
 
再添加一个可以给hugo在线写文章的网站,完美了
 

© 精灵猫 2021 - 2025