前端加密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