<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>加密 on Leanku 的博客</title><link>https://www.leanku.com/tags/%E5%8A%A0%E5%AF%86/</link><description>Recent content in 加密 on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 10 Feb 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.leanku.com/tags/%E5%8A%A0%E5%AF%86/index.xml" rel="self" type="application/rss+xml"/><item><title>单篇加密：保护你的私有内容</title><link>https://www.leanku.com/post/hugo-period/theme-encrypt/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/hugo-period/theme-encrypt/</guid><description>&lt;p&gt;Period 主题内置&lt;strong&gt;单篇加密&lt;/strong&gt;功能：正文加密后只显示密文，读者输入密码由浏览器端解密展示。&#10;适合私密内容、私人笔记等场景。&lt;/p&gt;&#10;&lt;h2 id="特性"&gt;特性&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;真加密&lt;/strong&gt;：构建产物与源码中均无明文，只有 AES-256-GCM 密文；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;零依赖前端&lt;/strong&gt;：解密用浏览器原生 Web Crypto，无第三方库；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;算法&lt;/strong&gt;：PBKDF2-SHA256（10 万次迭代）派生密钥 + AES-256-GCM 加密；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;不影响 SEO&lt;/strong&gt;：密文块自动加 &lt;code&gt;data-pagefind-ignore&lt;/code&gt;，标题/描述照常索引；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;不影响评论&lt;/strong&gt;：Giscus 在正文外，加密与评论互不干扰。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="快速开始推荐文章内标记--一键加密"&gt;快速开始（推荐：文章内标记 + 一键加密）&lt;/h2&gt;&#10;&lt;h3 id="1-在文章里直接写明文用标记包裹"&gt;1. 在文章里直接写明文，用标记包裹&lt;/h3&gt;&#10;&lt;p&gt;写作时，在需要加密的位置用 &lt;code&gt;protect&lt;/code&gt; 标记包裹明文（Markdown 编辑器友好，所见即所得）：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;可见正文……&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;{{% protect %}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;这是要加密的明文内容，直接写在这里&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;{{% /protect %}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;可见正文……&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-发布前原地加密"&gt;2. 发布前原地加密&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; themes/period&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs --lock content/post/xxx.md &lt;span class="c1"&gt;# 交互输入密码，原地替换为密文&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs --lock content/post/xxx.md 密码 &lt;span class="c1"&gt;# 或直接给密码&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs --lock content/post/ &lt;span class="c1"&gt;# 支持目录批量&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行后，文件里的明文标记被替换为密文 shortcode（提交到仓库的是&lt;strong&gt;密文&lt;/strong&gt;，无明文）。&lt;/p&gt;&#10;&lt;h3 id="3-修改已加密文章"&gt;3. 修改已加密文章&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs --unlock content/post/xxx.md &lt;span class="c1"&gt;# 密文还原为明文标记，改完再 --lock&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="其他用法命令行管道简单场景"&gt;其他用法（命令行管道，简单场景）&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs &lt;span class="s2"&gt;&amp;#34;密码&amp;#34;&lt;/span&gt; &amp;lt; plain.txt &amp;gt; cipher.txt &lt;span class="c1"&gt;# 加密文本片段&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;node scripts/encrypt.mjs --decrypt &lt;span class="s2"&gt;&amp;#34;密码&amp;#34;&lt;/span&gt; &amp;lt; cipher.txt &lt;span class="c1"&gt;# 解密验证&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="git-pre-commit-钩子可选防明文泄漏"&gt;git pre-commit 钩子（可选，防明文泄漏）&lt;/h3&gt;&#10;&lt;p&gt;将 &lt;code&gt;themes/period/scripts/pre-commit.example&lt;/code&gt; 复制到 &lt;code&gt;.git/hooks/pre-commit&lt;/code&gt;：&#10;提交时若检测到 &lt;code&gt;content/&lt;/code&gt; 下仍有未加密的明文标记，会&lt;strong&gt;阻止提交&lt;/strong&gt;，提醒先跑 &lt;code&gt;--lock&lt;/code&gt;。&#10;（本仓库的 &lt;code&gt;.git/hooks/pre-commit&lt;/code&gt; 已启用。）&lt;/p&gt;</description></item></channel></rss>