先贴上解密函数源代码
function(p, a, c, k, e, r) {
e = function(c) {
return (c < a ? '': e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};
if (!''.replace(/^/, String)) {
while (c--) r[e(c)] = k[c] || e(c);
k = [function(e) {
return r[e]
}];
e = function() {
return '\\w+'
};
c = 1
};
while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
return p
}
参数说明
p:被加密的源代码
a:加密令,一般为数值 62
c:为 k 的数组长度
k:数组数据,用于保存源码中被替换掉的数据
e:默认为 0
r:为{}
空对象,用于存放要替换的字符数据
代码分析
e = function(c) {
return (c < a ? '': e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
};
此函数的作用:通过数组**k
**长度,返回相关联的对应数组数据
//数据示例 k[c] 与 e(c) 对应的关系
k e(c)
0A 0
20 1
27 2
...
...
285Fwudqvlwlrq 2z
285Fydoxh 2A
285Fylvleoh 2B
**r
**对象则保存的数据即为:
r[0] = '0A'
r[1] = '20'
...
r[2z] = '285Fwudqvlwlrq'
r[2A] = '285Fydoxh'
最后通过匹配代码中所有的r
键值,替换成r
值
p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
此时的e(c)
、k[c]
是一个函数,因为c
被赋值为 1
使用replace
第二个参数为函数的方法,遍历替换代码中的字符返回,解密完成
另外再推荐两个加密解密函数,只是对源代码进行简单的加工一下
function eF(s){
var s1=escape(s);
var t='';
var r = parseInt(Math.random() * 8 + 1);
console.log(r);
for(i=0;i<s1.length;i++)
t+=String.fromCharCode(s1.charCodeAt(i) + r);
return(escape(t)+r.toString());
}
function dF(s){
var s1=unescape(s.substr(0,s.length-1));
// console.log(s1);
var t='';
for(i=0;i<s1.length;i++)
t+=String.fromCharCode(s1.charCodeAt(i)-s.substr(s.length-1,1));
return(unescape(t));
}