hugo-encryptor.html 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. {{/*
  2. ## Hugo Encrypt
  3. ### Params:
  4. - `password`:
  5. require param
  6. - Simple
  7. {{% hugo-encryptor "your password" %}}
  8. your content
  9. {{% /hugo-encryptor %}}
  10. */}}
  11. {{/* DEFAULTS */}}
  12. <hugo-encryptor>
  13. <p>以下内容被密码保护</p>
  14. <input id="hugo-encryptor-password" placeholder="请输入密码" />
  15. <input
  16. type="button"
  17. value="提交"
  18. onclick="hugoDecrypt(document.getElementById('hugo-encryptor-password').value,'input')"
  19. />
  20. <cipher-text data-password="{{ .Get 0 }}" style="display:none;">
  21. <p id="verifyText" style="display:none;">
  22. The quick brown fox jumps over the lazy dog
  23. </p>
  24. {{ .Inner }}
  25. </cipher-text>
  26. <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>
  27. <script>
  28. let cipher = document.getElementsByTagName("cipher-text")[0];
  29. const storageKey = location.pathname + "password";
  30. /**
  31. * @name: decrypt
  32. * @description: decrypt cipher text by password
  33. * @param {String} cipher_text
  34. * @param {String} password
  35. * @return:{String} decryptedData
  36. */
  37. const decrypt = function(cipher_text, password) {
  38. password = password.padEnd(16, "\0");
  39. let key = CryptoJS.enc.Utf8.parse(password);
  40. let decryptedData = CryptoJS.AES.decrypt(cipher_text, key, {
  41. iv: key,
  42. mode: CryptoJS.mode.CBC,
  43. padding: CryptoJS.pad.Pkcs7
  44. });
  45. return decryptedData.toString(CryptoJS.enc.Utf8);
  46. };
  47. /**
  48. * @name:hugoDecrypt
  49. * @description: judge the password ,and decrypt post
  50. * @param {String} password
  51. * @param {String} type
  52. */
  53. const hugoDecrypt = function(password, type) {
  54. try {
  55. let cipher_text = cipher.innerText;
  56. let decrypted_text = decrypt(cipher_text, password);
  57. if (
  58. decrypted_text.includes("The quick brown fox jumps over the lazy dog")
  59. ) {
  60. cipher.parentElement.outerHTML = decrypted_text;
  61. localStorage.setItem(storageKey, password);
  62. } else {
  63. if (type === "input") {
  64. alert("密码错误!");
  65. } else if (type === "storage") {
  66. localStorage.removeItem(storageKey);
  67. }
  68. }
  69. document.getElementById("verifyText").outerHTML = "";
  70. } catch (error) {
  71. console.log(error);
  72. if (type === "input") {
  73. alert("密码错误!");
  74. } else if (type === "storage") {
  75. localStorage.removeItem(location.pathname + "password");
  76. }
  77. }
  78. };
  79. </script>
  80. <script>
  81. window.onload = () => {
  82. if (localStorage.getItem(storageKey)) {
  83. hugoDecrypt(localStorage.getItem(storageKey), "storage");
  84. }
  85. };
  86. </script>
  87. </hugo-encryptor>