共计 2083 个字符,预计需要花费 6 分钟才能阅读完成。
首先,让咱们来看一个简略的 JavaScript 代码段,它是一段计算 10 的平方的代码:
Copy codevar x = 10;
var y = x * x;
console.log(y);
这段代码很简略,然而它也很容易被破解。事实上,如果有人查看了这段代码,他们很容易就可能读懂它并晓得它在做什么。为了避免别人轻易破解咱们的代码,咱们能够应用混同来使代码更难以被了解。
上面是应用混同的版本,其中变量和函数名被替换成了随机字符,以及进行了优化:
Copy codevar a = 2*(1^79)+36*(1^78)+118*(1^77)+8*(1^76)+2*(1^75)+93*(1^74)+128*(1^73)+84*(1^72)+99*(1^71)+21*(1^70)+27*(1^69)+4*(1^68)+89*(1^67)+97*(1^66)+19*(1^65)+61*(1^64)+36*(1^63)+65*(1^62)+94*(1^61)+82*(1^60)+74*(1^59)+118*(1^58)+90*(1^57)+34*(1^56)+82*(1^55)+8*(1^54)+35*(1^53)+121*(1^52)+44*(1^51)+82*(1^50)+79*(1^49)+17*(1^48)+125*(1^47)+13*(1^46)+1*(1^45)+52*(1^44)+67*(1^43)+29*(1^42)+51*(1^41)+57*(1^40)+66*(1^39)+98*(1^38)+9*(1^37)+21*(1^36)+72*(1^35)+12*(1^34)+43*(1^33)+32*(1^32)+11*(1^31)+86*(1^30)+68*(1^29)+34*(1^28)+83*(1^27)+89*(1^26)+26*(1^25)+39*(1^24)+3*(1^23)+54*(1^22)+32*(1^21)+51*(1^20)+14*(1^19)+121*(1^18)+41*(1^17)+35*(1^16)+13*(1^15)+54*(1^14)+74*(1^13)+106*(1^12)+82*(1^11)+112*(1^10)+96*(1^9)+80*(1^8)+74*(1^7)+107*(1^6)+102*(1^5)+52*(1^4)+13*(1^3)+64*(1^2)+2*(1^1)+120*(1^0);
var b = function (p) {return p * p;};
console.log(b(a));
这段代码很难读懂,然而对于机器而言,它是能够被执行的。在混同过程中,咱们应用了一些技巧,比方应用整数位运算符(^)来缩小变量字符数,应用随机函数名和数字来代替原有变量和函数名等等。
须要留神的是,混同并不能完全避免代码被破解,只是减少了代码浏览和了解的难度。为了进一步保障代码平安,咱们还能够应用加密算法来加密代码,以及应用代码签名来确保代码的完整性和起源。
上面是一个简略的解密示例代码,用于解密咱们下面的示例混同代码:
Copy codefunction decrypt(str){var arr = str.split('^').map(function(x) {return parseInt(x) & 0xff; });
var str = String.fromCharCode.apply(null, arr);
return str;
}
var a = decrypt('142^79|20^78|118^77|40^76|70^75|75^74|32^73|4^72|79^71|6^70|47^69|42^68|3^67|101^66|68^65|83^64|61^63|94^62|52^61|97^60|66^59|97^58|42^57|109^56|36^55|41^54|54^53|64^52|16^51|33^50|77^49|7^48|72^47|8^46|95^45|101^44|100^43|77^42|47^41|20^40|74^39|90^38|80^37|55^36|76^35|123^34|41^33|82^32|109^31|58^30|57^29|32^28|59^27|128^26|54^25|92^24|67^23|35^22|119^21|92^20|68^19|37^18|82^17|86^16|69^15|101^14|54^13|119^12|38^11|35^10|17^9|5^8|70^7|28^6|116^5|98^4|104^3|58^2|105^1|117^0');
var b = function (p) {return p * p;};
console.log(b(a));
解密函数应用了位运算符(^)来进行解密,而后应用了 String.fromCharCode 办法将数字转换为字符。
jsjiami.com
如果您对文章内容有不同认识, 或者疑难,欢送到评论区留言,或者私信我都能够。
也能够到上方网站,底部有我联系方式详谈。
正文完