NetStrEncryptor

加密为需要远程链接字典的密文,即远程网页变化密文就不再能被解密

目前为 2023-06-07 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name NetStrEncryptor
  3. // @namespace https://ez118.github.io/
  4. // @version 0.2
  5. // @description 加密为需要远程链接字典的密文,即远程网页变化密文就不再能被解密
  6. // @author ZZY_WISU
  7. // @match *://*/*
  8. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAxdJREFUWEftlkFrU0EUhWtC0rSCP0FBbCouXHTR/yCITV2IuOhOTFWaWimEtm67NZGmcecvEKQLhTYqKE3dubUL265DEdOAQoh93m868xjfu0kKXdRFDxwY5k5y7tx7Zt4MnOG/xfla5XpmozI1VKtOXnlbvmCnQ1z79fni6M/6PcjYTofgN0vBbm7pcGdq4XBvzE73Bz/MvK9sDH94GTgO1qo/SMQsCIJEtrm1LOxcbX0JIGPmiLEE4fk/31vPgr3AcfFwd03bSAxRcY9tSWJ8pLn11AlHSYzd+sI+ScLK6KDsinDITG31tey0oYlDYoho4o4920HPNWGPbU3YZ7T0UeIJKxcHfVZEQ0r82+jBlioM8cJ8Z2dbE3bEH1YuDkyC4TRxmNlYLWYP6uuaOCS2GOwWNWFIdfoa0VahHRMXc176+CrDkdN8wBwx1kiZN7UEeu7eB27HcEPvyr8pOzvnj23Y3AEjzfrK5f1P+5CxfxewlkrQDnaNMY9/F8hZTpcLc6nnhcbgi9kAyng9U5oJBYZrqzdIzFXHjGXOhk2CtMP5hepwRN090ROp0syyE/ZJQiSBkN+afyixbi2yiSxbGR0IpEuFjpYAlORW/J1HSUxEqpo4lFjHb1UMqdKTu5qwY7oyt68J+8QTmrhjtlW/Y+XiOPUETtoCuUO+nqgF4FRNaBA5hlSk3zFk58zZcHgM2bEVbmSb9dljHUOQun9z7Fw+t5Z8lGslH9/eTuQnFvyLyLSqXKjiCUMZ+wmylsvLJtmWS+2NjMdtuDeS0xO55MPJIMrEg9ym+WMRctXRWsQaUxG/NUfkPXH0qOkGPhRm10oCMJHPFWlHVNzRtEp2rogb8qHr+THqtvuQ0g5N2BG/9Dolhp5XYkhM35pShR2lOpqwTz5gqrAljx4rFwfmU4UtMabWf0fjAzGcJuzIs8/K6TDuV8QhCXJENXFIDLeLUOw9AUnOynQHJoklgTHFH2aBnGUuK//GNHeFzLlzjtujLyvE+76GfLBb4wkR1n5ojqN8O6B/BzjwGwxHz/uW/Qynh4GBv0DJSVGh5ezOAAAAAElFTkSuQmCC
  9. // @license GNU GPLv3
  10. // @grant GM_xmlhttpRequest
  11. // @grant GM_download
  12. // @grant GM_registerMenuCommand
  13. // @grant GM_unregisterMenuCommand
  14. // @grant GM_setValue
  15. // @grant GM_getValue
  16. // @grant GM_addStyle
  17. // @connect *
  18. // @require https://greasyfork.org/scripts/456485-pops/code/pops.js?version=1187390
  19. // ==/UserScript==
  20.  
  21.  
  22.  
  23.  
  24. function GetAjax(func, url) {
  25. GM_xmlhttpRequest({
  26. method: "GET", url: url, data:"",
  27. headers: {"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"},
  28. onload: function(response){func(response.responseText);}, onerror: function(response){alert("[错误]\n请求失败");}
  29. });
  30. }
  31. function jsprompt(text, func, default_text){
  32. if(default_text == null || default_text == undefined) { default_text = ""; }
  33. pops.prompt({
  34. position: "center",
  35. closeEnable: true,
  36. mask: true,
  37. only: true,
  38. title: {
  39. text: text,
  40. position: "center",
  41. },
  42. content: {
  43. placeholder: "Input Here...",
  44. text: default_text,
  45. row: true /* 多行 */,
  46. focus: true /* 输入框自动聚焦 */,
  47. },
  48. btn: {
  49. ok: {
  50. callback: (event) => {
  51. event.close();
  52. func(event)
  53. },
  54. }
  55. }
  56. });
  57. }
  58. function jsalert(title,text){
  59. pops.alert({
  60. mask: true,
  61. only: true,
  62. title: {
  63. text: title,
  64. position: "left",
  65. html: false,
  66. /* true是不添加p标签,false是添加p标签 */
  67. },
  68. content: {
  69. text: text,
  70. html: false,
  71. /* true是不添加p标签,false是添加p标签 */
  72. },
  73. btn: {
  74. position: "center",
  75. /* center、flex-start、flex-end、space-between、space-around、space-evenly */
  76. ok: {
  77. /* 是否启用 */
  78. enable: true,
  79. text: "OK",
  80. type: "primary" /* 按钮样式 */,
  81. callback: function (event) {
  82. event.close();
  83. },
  84. }
  85. }
  86. });
  87. }
  88.  
  89. var Current_Dict = "";
  90. var DefaultDict = "asdf1234ghjk5678lqwe90-=rtyu[]\\;iopz',./xcvb`~!@nmMN#$%^BVCX&*()ZLKJ_+{}HGFD|:\"<SAQW>?ERTY UIOP";
  91.  
  92. function encode(st) {
  93. return btoa(encodeURIComponent(st));
  94. }
  95.  
  96. function decode(st) {
  97. return decodeURIComponent(atob(st));
  98. }
  99.  
  100. function hex2int(num) {
  101. return parseInt(num, 16);
  102. }
  103.  
  104. function int2hex(num) {
  105. let ss = num.toString(16);
  106. if (ss.length < 2) {
  107. ss = "0" + ss;
  108. }
  109. return ss;
  110. }
  111.  
  112. function CreateDict(url, func) {
  113. let dic = "";
  114. GetAjax(function(result){
  115. let codes = result.replace(/\\n/g,"");
  116. codes = codes.replace(/[\u4e00-\u9fa5]/g,'');
  117. codes = encode(url) + encode(codes) + DefaultDict;
  118.  
  119. for (let i = 0; i < codes.length; i++) {
  120. if (dic.indexOf(codes.charAt(i)) >= 0) {
  121. continue;
  122. } else {
  123. dic += codes.charAt(i);
  124. }
  125. }
  126. Current_Dict = dic;
  127. func(dic)
  128. }, url);
  129. }
  130.  
  131. function NetEncode(dic, txt) {
  132. let final_txt = "";
  133. const orig_txt = encode(txt);
  134.  
  135. for (let i = 0; i < orig_txt.length; i++) {
  136. if (dic.indexOf(orig_txt.charAt(i)) >= 0) {
  137. final_txt += int2hex(dic.indexOf(orig_txt.charAt(i)));
  138. } else {
  139. final_txt += "**";
  140. }
  141. }
  142.  
  143. final_txt = encode(final_txt);
  144. return final_txt;
  145. }
  146.  
  147. function NetDecode(dic, txt) {
  148. let final_txt = "";
  149. const orig_txt = decode(txt).replace("**", "");
  150.  
  151. for (let i = 1; i < orig_txt.length; i += 2) {
  152. try {
  153. final_txt += dic[hex2int(orig_txt.charAt(i - 1) + orig_txt.charAt(i))];
  154. } catch {
  155. continue;
  156. }
  157. }
  158.  
  159. final_txt = decode(final_txt);
  160. return final_txt;
  161. }
  162.  
  163.  
  164. let menu1 = GM_registerMenuCommand('加密', function () {
  165. let branchURL = GM_getValue("branchURL"); /*prompt("URL: ");*/
  166. CreateDict(branchURL, function(){
  167. jsprompt("待加密文本", function(orig_txt){
  168. jsalert("加密结果", NetEncode(Current_Dict, orig_txt.text));
  169. });
  170.  
  171. });
  172. }, 'E');
  173. let menu2 = GM_registerMenuCommand('解密', function () {
  174. let branchURL = GM_getValue("branchURL"); /*prompt("URL: ");*/
  175. CreateDict(branchURL, function(){
  176. jsprompt("待解密文本", function(orig_txt){
  177. jsalert("解密结果", NetDecode(Current_Dict, orig_txt.text));
  178. });
  179. });
  180. }, 'D');
  181. let menu3 = GM_registerMenuCommand('设定加解密字典链接', function () {
  182. jsprompt("设定加解密字典链接", function(orig_txt){
  183. GM_setValue("branchURL", orig_txt.text);
  184. console.log("字典链接设置成功");
  185. }, GM_getValue('branchURL'));
  186. }, 'D');
  187.  
  188.  
  189. (function() {
  190. 'use strict';
  191. if(GM_getValue('branchURL') == null || GM_getValue('branchURL') == "" || GM_getValue('branchURL') == undefined){ GM_setValue('branchURL', "https://www.cnblogs.com/"); }
  192. })();