// ==UserScript==
// @name NetStrEncryptor
// @namespace https://ez118.github.io/
// @version 0.2
// @description 加密为需要远程链接字典的密文,即远程网页变化密文就不再能被解密
// @author ZZY_WISU
// @match *://*/*
// @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
// @license GNU GPLv3
// @grant GM_xmlhttpRequest
// @grant GM_download
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addStyle
// @connect *
// @require https://greasyfork.org/scripts/456485-pops/code/pops.js?version=1187390
// ==/UserScript==
function GetAjax(func, url) {
GM_xmlhttpRequest({
method: "GET", url: url, data:"",
headers: {"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"},
onload: function(response){func(response.responseText);}, onerror: function(response){alert("[错误]\n请求失败");}
});
}
function jsprompt(text, func, default_text){
if(default_text == null || default_text == undefined) { default_text = ""; }
pops.prompt({
position: "center",
closeEnable: true,
mask: true,
only: true,
title: {
text: text,
position: "center",
},
content: {
placeholder: "Input Here...",
text: default_text,
row: true /* 多行 */,
focus: true /* 输入框自动聚焦 */,
},
btn: {
ok: {
callback: (event) => {
event.close();
func(event)
},
}
}
});
}
function jsalert(title,text){
pops.alert({
mask: true,
only: true,
title: {
text: title,
position: "left",
html: false,
/* true是不添加p标签,false是添加p标签 */
},
content: {
text: text,
html: false,
/* true是不添加p标签,false是添加p标签 */
},
btn: {
position: "center",
/* center、flex-start、flex-end、space-between、space-around、space-evenly */
ok: {
/* 是否启用 */
enable: true,
text: "OK",
type: "primary" /* 按钮样式 */,
callback: function (event) {
event.close();
},
}
}
});
}
var Current_Dict = "";
var DefaultDict = "asdf1234ghjk5678lqwe90-=rtyu[]\\;iopz',./xcvb`~!@nmMN#$%^BVCX&*()ZLKJ_+{}HGFD|:\"<SAQW>?ERTY UIOP";
function encode(st) {
return btoa(encodeURIComponent(st));
}
function decode(st) {
return decodeURIComponent(atob(st));
}
function hex2int(num) {
return parseInt(num, 16);
}
function int2hex(num) {
let ss = num.toString(16);
if (ss.length < 2) {
ss = "0" + ss;
}
return ss;
}
function CreateDict(url, func) {
let dic = "";
GetAjax(function(result){
let codes = result.replace(/\\n/g,"");
codes = codes.replace(/[\u4e00-\u9fa5]/g,'');
codes = encode(url) + encode(codes) + DefaultDict;
for (let i = 0; i < codes.length; i++) {
if (dic.indexOf(codes.charAt(i)) >= 0) {
continue;
} else {
dic += codes.charAt(i);
}
}
Current_Dict = dic;
func(dic)
}, url);
}
function NetEncode(dic, txt) {
let final_txt = "";
const orig_txt = encode(txt);
for (let i = 0; i < orig_txt.length; i++) {
if (dic.indexOf(orig_txt.charAt(i)) >= 0) {
final_txt += int2hex(dic.indexOf(orig_txt.charAt(i)));
} else {
final_txt += "**";
}
}
final_txt = encode(final_txt);
return final_txt;
}
function NetDecode(dic, txt) {
let final_txt = "";
const orig_txt = decode(txt).replace("**", "");
for (let i = 1; i < orig_txt.length; i += 2) {
try {
final_txt += dic[hex2int(orig_txt.charAt(i - 1) + orig_txt.charAt(i))];
} catch {
continue;
}
}
final_txt = decode(final_txt);
return final_txt;
}
let menu1 = GM_registerMenuCommand('加密', function () {
let branchURL = GM_getValue("branchURL"); /*prompt("URL: ");*/
CreateDict(branchURL, function(){
jsprompt("待加密文本", function(orig_txt){
jsalert("加密结果", NetEncode(Current_Dict, orig_txt.text));
});
});
}, 'E');
let menu2 = GM_registerMenuCommand('解密', function () {
let branchURL = GM_getValue("branchURL"); /*prompt("URL: ");*/
CreateDict(branchURL, function(){
jsprompt("待解密文本", function(orig_txt){
jsalert("解密结果", NetDecode(Current_Dict, orig_txt.text));
});
});
}, 'D');
let menu3 = GM_registerMenuCommand('设定加解密字典链接', function () {
jsprompt("设定加解密字典链接", function(orig_txt){
GM_setValue("branchURL", orig_txt.text);
console.log("字典链接设置成功");
}, GM_getValue('branchURL'));
}, 'D');
(function() {
'use strict';
if(GM_getValue('branchURL') == null || GM_getValue('branchURL') == "" || GM_getValue('branchURL') == undefined){ GM_setValue('branchURL', "https://www.cnblogs.com/"); }
})();