docsify 文章加密

docsify 文章加密

什么是docsify?

简单来说是一款便捷的文档网站

官网文档

docsify支持很多中部署方式,包括单独部署,Github部署,Gitee部署....对于没有前端能力固定样式非常友好

加密需求

对于部署上的文档在部分时候需要进行加密,加密方式有两种

  1. 文档整体加密

  2. 部分内容加密

探索加密

文档整体加密

搜索各大网站只有别人写的问题整体加密, 参考文章:docsify文档加密解密插件

需要文章整体加密的使用上面文档即可,写的很详细。

文档部分加密

针对文档部分加密并没有找到方案...实在忍不住只能自己写了。

思路开端:docsify会在加载md文件时会先转化为html,然后再加载到页面,思路来自于看到全文加密的源码中。

翻官方文档,在自定义插件中找到方法:

 hook.afterEach(function(html, next) {
        // 解析成 html 后调用。
        // beforeEach 和 afterEach 支持处理异步逻辑
        // ...
        // 异步处理完成后调用 next(html) 返回结果
        next(html);
      });

思路

转换md文件到html后解析自定义标签,我这里使用的是标签,如果url上的pwd密码参数等于标签中的value属性则展示标签包含的加密内容,否则展示另一端提示的html。

代码

定义解析html方法

function parsePwd(content) {
      // Get the URL parameters
      let currentURL = window.location.href;
      const hashParams = currentURL.split('?')[1]; // 获取问号后面的部分
      var urlParams = new URLSearchParams(hashParams);
      var pwdParam = urlParams.get('pwd');

      // Replace <pwd> and <tip> tags based on password validation
      return content.replace(/<pwd\s+(.*?)>([\s\S]*?)<\/pwd>/g, function (match, attributes, pwdContent) {
          // 匹配 pwd 标签中的各个属性
          const regex = /(\w+)=['"](.*?)['"]/g;
          let attrMatch;
          let password = '';
          let pwd = '';
          let urlContent = '';

          // 提取属性值
          while ((attrMatch = regex.exec(attributes)) !== null) {
              const attrName = attrMatch[1];
              const attrValue = attrMatch[2];
              if (attrName === 'value') password = attrValue;
              if (attrName === 'pwd') pwd = attrValue;
              if (attrName === 'url') urlContent = attrValue;
          }

          if (pwdParam === password) {
              return pwdContent; // 如果 URL 参数匹配,则显示 <pwd> 标签内容
          } else {
              if (pwdParam){
                  alert("密码错误,请重新输入")
              }
              let tipContent = '<p style="text-align: center;"><img src="' + urlContent + '" data-origin="http://niubility.cloud/image/rui.jpg" alt=""></p><p style="text-align: center;"><strong>人机验证,扫码回复:' + pwd + '</strong></p><p style="text-align: center;"><input id ="pwd" /> <button onclick="addParamAndRefresh()">验证</button></p>';
              return tipContent; // 否则显示提示内容
          }
      });
  }

定义按钮点击提交密码方法

// 点击按钮时执行的函数
function addParamAndRefresh() {
    // 获取输入框元素
    let inputElement = document.getElementById('pwd');
    // 获取输入框的值
    let inputValue = inputElement.value;
    if (!inputValue) {
        return
    }
    let currentURL = window.location.href;
    const hashParams = currentURL.split('?')[1]; // 获取问号后面的部分
    var urlParams = new URLSearchParams(hashParams);
    // 检查是否存在名为 'pwd' 的参数
    if (urlParams.has('pwd')) {
        // 修改 'pwd' 参数的值为 '1'
        urlParams.set('pwd', inputValue);
    } else {
        // 如果 'pwd' 参数不存在,则添加它
        urlParams.append('pwd', inputValue);
    }
    // 获取更新后的参数字符串
    var newParams = urlParams.toString();

    // 更新当前页面URL中的参数部分
    if (newParams) {
        currentURL = currentURL.split('?')[0] + '?' + newParams;
    } else {
        currentURL = currentURL.split('?')[0];
    }

    // 刷新页面并跳转到新的URL
    // 改变 hash 路由
    // 使用 Docsify 提供的 router.go() 方法进行路由导航
    //window.$docsify.router.go(currentURL);
    window.location.href = currentURL;
}

注册到插件回调调用

   // Parse <pwd> tags in the page content
    function parseContent(content) {
        return parsePwd(content);
    }

    const afterEachHook = function (hook, vm) {
        hook.beforeEach(function (html, next) {
            next(parseContent(html))
        });
    }
    window.$docsify.plugins = [afterEachHook].concat(window.$docsify.plugins || []);

效果展示

问题

  1. 在parsePwd方法中我添加图片标签和输入框和按钮,可以根据自己具体实际需求调整展示

  2. 提交按钮这里使用的路由模式是history,如果是使用的hash模式,获取参数代码我贴在下下面

window.$docsify = {
      //通用设置
      // -----------------------------------------------------
      // 加载自定义导航栏,需要目录下有_navbar.md文件
      loadNavbar: false,
      // 路由模式
      routerMode: 'history',
}

//不是路由模式获取参数代码
// 获取 URL 哈希部分
const hash = window.location.hash;

// 如果哈希部分存在并且包含参数
if (hash.includes('?')) {
  const hashParams = hash.split('?')[1]; // 获取问号后面的部分
  const urlParams = new URLSearchParams(hashParams);

  // 获取名为 pwd 的参数值
  const pwdValue = urlParams.get('pwd');
  // 获取名为 a 的参数值
  const aValue = urlParams.get('a');

  console.log(pwdValue); // 输出: 123
  console.log(aValue); // 输出: 1
}

完整代码获取

docsify文章加密icon-default.png?t=N7T8http://niubility.cloud/record/docsify%E6%96%87%E7%AB%A0%E5%8A%A0%E5%AF%86

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Docsify 是一個方便的文件生成工具,可以幫助用戶將 Markdown 格式的文檔生成漂亮的文檔網站。如果你想要將你的 Docsify 文檔保護起來,可以使用加密插件來實現。 以下是在 Docsify 中使用加密插件的步驟: 1. 安裝加密插件:在你的 Docsify 專案中添加加密插件,可以使用 npm 或者 yarn 安裝,命令如下: ```bash npm install docsify-plugin-lock --save-dev ``` 2. 配置加密插件:在你的 Docsify 專案的 `index.html` 文件中添加以下配置: ```html <script> window.$docsify = { lock: { password: '你的密碼' } } </script> ``` 這裡需要把 `password` 替換成你想要設置的密碼。 3. 鎖定頁面:要鎖定一個頁面,只需在 Markdown 文件中添加 `<!--lock-->` 即可。這樣這個頁面就會被加密,只有輸入正確密碼才能查看。 以上就是在 Docsify 中使用加密插件的步驟。希望能對你有所幫助! ### 回答2: docsify加密插件是一种用于对网站内容进行加密的工具。它能够帮助网站管理员对特定页面、文档或文件进行加密保护,仅允许有权限的用户访问。该插件提供了一种简单且有效的方式来确保敏感信息只能被授权人员查看。 使用docsify加密插件可以在网站中添加加密层,保护敏感的信息。管理员可以根据需要选择加密的页面或文件,并设置访问权限。这样,只有具备正确密码或其他验证方式的用户才能解密并查看内容。这种安全措施可以帮助保护私密文件、限制对敏感信息的访问,并提高网站的安全性。 docsify加密插件的安装和使用相对简单。首先,管理员需要下载并安装该插件。然后,在网站的配置文件中启用插件,并根据需要进行相应的设置,如设置访问密码等。在完成设置后,用户访问被加密保护的页面时,将会看到一个登录界面,需要输入正确的密码才能继续访问页面内容。 总结一下,docsify加密插件是一种用于对网站内容进行加密保护的工具。它提供了简单且有效的方式来限制对敏感信息的访问,并提高网站的安全性。通过适当配置,只有授权的用户才能解密并查看被加密的内容,从而保护您的隐私和敏感信息。 ### 回答3: docsify加密插件是一种在docsify静态站点中实现内容加密的插件。它可以帮助用户保护敏感信息和限制访问权限。 使用docsify加密插件,我们可以在网站上选择性地加密某些页面或特定部分的内容。只有具有正确密码或权限的用户才能解锁和查看被加密的内容。这种功能对于分享保密信息、内部文档、培训资料等场景非常有用。 通过在docsify的配置文件中添加插件的相关设置,我们可以轻松地启用加密功能。首先,我们需要设置一个密码或者一组权限,以便用户能够解锁被加密的内容。然后,我们可以在需要加密的页面或特定元素上使用插件提供的标记语法进行加密。这样一来,只有输入正确密码或具备相应权限的用户才能正确查看被加密的内容。 docsify加密插件的优势在于它的简单易用性和灵活性。使用该插件,我们可以保护隐私和敏感信息,确保只有授权的用户能够访问和查看内容。同时,它也提供了一种灵活的权限管理方式,可以根据需求对不同的用户设定不同的访问权限。这为组织和团队内部的知识共享和保密提供了便利和安全性。 总之,docsify加密插件为docsify静态站点提供了内容加密的功能,通过设置密码和权限,可以保护敏感信息和限制访问权限,同时保证了简单易用性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niubility锐

觉得有用的话鼓励鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值