前端加密javascript——eval加密


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
function myFunction(){
    document.getElementById("demo").innerHTML="Hello World";
}
var 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>
</head>
<body>
    
<textarea id=code cols=80 rows=20> 
</textarea><br> 
<p>单击按钮触发函数。</p>
<button onclick="encode()">加密</button>
<button onclick="decode()">解密</button>
<p id="demo"></p>

</body>
</html>

网上的例子

 

测试了一下

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="a"></div>
</body>
<script>
    document.getElementById('a').innerHTML = "testContent";
</script>
</html>

eval混淆以后

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="a"></div>
</body>
<script>
    eval(function(p,a,c,k,e,d,aaa){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}(' 1.2(\'0\').3 = "4";',62,5,'a|document|getElementById|innerHTML|testContent'.split('|'),0,{}))
</script>
</html>

任然可以运行。

可以修改encode函数里面的的一些值,我试了,没什么问题。

 

看加密算法的初衷是,想写一个功能,想把核心逻辑的一块代码不被抄袭,但是javascript很难不被反编译。但是常用的加密方式都是可以很容易就被反向破解的,所以研究一下加密算法,自己改一套加密算法,这样破解难度就比较大。javascript既然能够按照约定的格式加密,那么加密的时候,加入随机生成的代码段和变量值,和你自己写的算法,就很难被反编译了。(后台获取还得防止代理篡改)。还可以把js的某一段代码通过后台传输注入到页面上面,而且根据用户的值去生成,这样换个人用同一套注入的前端代码就不能匹配上,然后返回后端校验,再多次返回,检验不通过,就无法运行代码了。这是我的设想

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM