你的位置:首页 > 软件开发 > Java > js压缩、混淆和加密

js压缩、混淆和加密

发布时间:2015-11-28 11:00:09
最近看到有些论坛在讨论js压缩、混淆和加密的问题,特意找了些资料看了下,现在总结一下:1.关于三者的定义与区别压缩:删除 Javascript 代码中所有注释、跳格符号、换行符号及无用的空格,从而压缩 JS 文件大小,优化页面加载速度。混淆:经过编码将变量和函数原命名改为毫无意义 ...

最近看到有些论坛在讨论js压缩、混淆和加密的问题,特意找了些资料看了下,现在总结一下:

1.关于三者的定义与区别

压缩:删除 Javascript 代码中所有注释、跳格符号、换行符号及无用的空格,从而压缩 JS 文件大小,优化页面加载速度。

混淆:经过编码将变量和函数原命名改为毫无意义的命名(如function(a,b,c,e,g)等),以防止他人窥视和窃取 Javascript 源代码,也有一定压缩效果。

加密:一般用eval方法加密,效果与混淆相似,也做到了压缩的效果。

  从定义中可以看出,压缩的主要目的是消除注释等无用字符,达到精简js代码,减小js文件大小的目的,这也是页面优化的一种方式;而混淆和加密的目的比较接近,都是为了防止他人直接查看源码,对代码(如重要的api等)起保护作用,但这也只是增加了阅读代码的代价,也就是所谓的防君子不防小人。但是当混淆和加密联合使用时,如先混淆在加密(或者先加密再混淆)时,破解时间就会增加。关于js的加密,可以参考这篇文章:http://www.cnblogs.com/top5/archive/2009/08/07/1540860.html

2.demo

下面以更直观的方式来体会一下这四种方式(压缩、混淆、加密、混淆&加密)的不同。

源js代码如下:

js压缩、混淆和加密js压缩、混淆和加密
 1 /* 这个是一个类 */ 2  3 function xx(num, str) { 4   //说明 5   var a = num; 6   this.aa = a; 7   this.bb = function() {alert(str);} 8   this.cc = function() { 9     for (var i = 0; i < 10; i++) {10       document.title = i;11     }12   }13   this.yy = new yy();14   function xxf() {15     alert("xxf");16     if ((/\{\d+\}/).test("a\sdf{2}ab"))17       alert("{\\d} is match!");18   }19 }20 xx.prototype.dd = function(){21   alert("dd");22   a.yy.ll();23   var fnx = function(i) {24     this.ab = i;25     this.aa = function(){26       alert(this.ab);27     }28   }29   var f1 = new fnx(1);30   f1.aa();31 }32 33 function yy(){34   alert('yy');35 }36 yy.prototype.ll = function() {37   alert("yyll");38 }39 40 var a = new xx(100, "hello"), b = new xx(0, "ttyp");41 eval("a.aa=20");42 a.bb();43 b.dd();44 alert(a.aa);45 46 var k = 9;47 function kk() {48   var k = 0;49   alert(k);50 }51 kk();52 alert(k);53 //输入结果alert:"yy"->"yy"->"hello"->"dd"->"yyll"->"12"->"20"->"0"->"9"

原标题:js压缩、混淆和加密

关键词:JS

JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。