下面是一段加密后的代码,很晕吧,但事实上只是使用了障眼法,把换行取消掉了而已,让我们排版一下再来看看到底是什么?
排版后
那么熟悉这种函数写法的应该就能明白这个加密原理了吧。只要细心点就能发现其实这种加密手段是用来防止一些拿来主意者。上面加密的js代码如果想得到其原代码可以在“return p;” 之前打印出来既可,例如:“document.writeln(p);”。 顺便介绍一下 eval 方法。
eval 方法
检查 Javascript 代码并执行.
eval(codeString)
必选项 codestring 参数是包含有效 Javascript 代码的字符串值。这个字符串将由 Javascript 分析器进行分析和执行。
说明
eval 函数允许 Javascript 源代码的动态执行。例如,下面的代码创建了一个包含 Date 对象的新变量 mydate :
eval(“var mydate = new Date();”);
传递给 eval 方法的代码执行时的上下文和调用 eval 方法的一样.
这种语法是这样的,例如代码:
var test_func = function (par1, par2) {
alert("par1: "+par1+"npar2: "+par2);
}("我是第一个参数。", "还有我是第二个参数");
和下面代码效果是一样的:
function test_func (par1, par2) {
alert("par1: "+par1+"npar2: "+par2);
}
test_func("我是第一个参数。", "还有我是第二个参数");
解密function(p,a,c,k,e,r)用脚本,运行即可见效果:
js加密解密 - 志文工作室a=62;
function encode() {
var code = document.getElementById('code').value;
code = code.replace(/[rn]+/g, '');
code = code.replace(/'/g, "\'");
var tmp = code.match(/b(w+)b/g);
tmp.sort();
var dict = [];
var i, t = '';
for(var i=0; i
if(tmp != t) dict.push(t = tmp);
}
var len = dict.length;
var ch;
for(i=0; i
ch = num(i);
code = code.replace(new RegExp('\b'+dict+'\b','g'), ch);
if(ch == dict) dict = '';
}
document.getElementById('code').value = "eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k)p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k);return p}(" + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))";
}
function num(c) {
return(c35?String.fromCharCode(c+29):c.toString(36));
}
function run() {
eval(document.getElementById('code').value);
}
function decode() {
var code = document.getElementById('code').value;
code = code.replace(/^eval/, '');
document.getElementById('code').value = eval(code);
}
推荐一个不错的在线加密解密工具:http://issmall.isgreat.org/