- A+
所属分类:程序设计
有时候我们会遇到类似eval(function(p,a,c,k,e,d)的Javascript加密脚本,或者是我们需要对自己的Js脚本进行加密,下面这个Javascript小程序为大家解决了这个难题。
(注意:在粘贴代码到下面文本框时请勿包含注释及空行,框内内容应类似于“eval(function(p,a,c,k,e,d)......{}))”格式)
eval(function(p,a,c,k,e,d)系列加密/解密javascript程序源码如下:
- <script>
- a=62;
- function encode() {
- var code = document.getElementById('code').value;
- code = code.replace(/[\r\n]+/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<tmp.length; i++) {
- if(tmp[i] != t) dict.push(t = tmp[i]);
- }
- var len = dict.length;
- var ch;
- for(i=0; i<len; i++) {
- ch = num(i);
- code = code.replace(new RegExp('\\b'+dict[i]+'\\b','g'), ch);
- if(ch == dict[i]) dict[i] = '';
- }
- document.getElementById('code').value = "eval(function(p,a,c,k,e,d){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--)d[e(c)]=k[c]||e(c);k=[function(e){return d[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}("
- + "'"+code+"',"+a+","+len+",'"+ dict.join('|')+"'.split('|'),0,{}))";
- }
- function num(c) {
- return(c<a?'':num(parseInt(c/a)))+((c=c%a)>35?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);
- }
- </script>
- <textarea id=code cols=80 rows=20>
- </textarea><br>
- <input type=button onclick=encode() value=编码>
- <input type=button onclick=run() value=执行>
- <input type=button onclick=decode() value=解码>