Mayx's Home Page https://mabbs.github.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
1.7 KiB

  1. ---
  2. layout: post
  3. ---
  4. <script src="/js/aes.js"></script>
  5. <script>
  6. function getByteLen(val) {
  7. var len = 0;
  8. for (var i = 0; i < val.length; i++) {
  9. if (val[i].match(/[^\x00-\xff]/ig) != null) len += 3;
  10. else len += 1;
  11. }
  12. return len;
  13. }
  14. function onbtnDecrypto() {
  15. var encryptedData = "{{ content | strip_html | strip_newlines }}";
  16. var keyword = document.getElementById("inputkey").value;
  17. if (keyword.replace(/(^\s*)|(\s*$)/g, "") == '') {
  18. alert("请输入密码!");
  19. return;
  20. }
  21. while (getByteLen(keyword) % 8 != 0) {
  22. keyword = keyword + "\0";
  23. }
  24. var key = CryptoJS.enc.Utf8.parse(keyword);
  25. var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
  26. var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
  27. var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
  28. mode: CryptoJS.mode.ECB,
  29. padding: CryptoJS.pad.Pkcs7
  30. });
  31. if (decryptedData.sigBytes < 0) {
  32. document.getElementById("output").innerHTML = "解密失败!密文或者key错误!";
  33. return;
  34. }
  35. try {
  36. decryptedData.toString(CryptoJS.enc.Utf8)
  37. } catch(e) {
  38. document.getElementById("output").innerHTML = "解密失败!密文或者key错误!";
  39. return;
  40. }
  41. var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
  42. document.getElementById("output").innerHTML = decryptedStr;
  43. document.getElementById("pwinput").style.display = "none";
  44. }
  45. </script>
  46. <div id="pwinput">{{ page.tips | default: "请输入密码:" }}<br />
  47. <input id="inputkey" type="password" /> <button onclick="onbtnDecrypto()">解密</button>
  48. </div>
  49. <div id="output"></div> <br />

Powered by TurnKey Linux.