【javascript学习指南】Javascript代码的混淆与加密的例子

更新时间:2020-05-08    来源:js教程    手机版     字体:

【www.bbyears.com--js教程】

本文只是提一些关于混淆与压缩的想法,可能会偶发抽风型更新。

混淆就是尽量让JS代码看不懂。

JS的变量名可以以字母或特殊符号开头,但不能以数字开头.

1a不是一个合法的变量名,但_1a就是

JS的变量名开头能用的特殊符号只有两个:$和_.前者被jquery等发扬光大,后者则由underscore占据.

混淆可以让格式良好的代码都看不懂,就是把变量名函数名通通变成_1,_2,_11,_a,_1a2c这种(easyui就是这么搞的).

相比a,b,c,我觉得_1,_2,_3这种名称更让人混淆,虽然后者更长.
easyui的混淆,做得还不算太绝。虽然他所有变量都是_+数字这样的,但重名的变量却不算多,梳理一下还是可以看懂的。

要做得更绝,可以人工使用大量同名变量————因为JS的不同作用域里,同名变量并不会冲突。

压缩加密
很多人认为两者是一样的,所以我就都放一起了。反正就是指:让代码量变得更少。

要想压缩得更小,还要靠一些特别的编码格式—-不过这些格式一般也是良好的编码格式,并不是为了压缩了故意这样做.

用一个var加,分隔声明多个连续变量.

如:

1
var a = 1,b = 2, c={},d="sss",e=[1,2,3];
因为压缩工具不会把多个var自动合并成一个.

压缩工具不会把true和false做处理。在不严谨的场景,你可以把true写成1,false写成0.或把true改为!0,false改为!1(有的压缩工具会自动改)

如果多处用到undefined或null,可用变量预先保存他们

压缩工具不会把变量本地化,但把变量本地化后再压缩可以缩减很大的字节量.所以推荐.

本地化(其实叫做私有化)即你有一个函数,里面多次调用了外部的a.b.c方法(或属性),那么你就应该把他存下来,

var c = a.b.c;
c...

极端压缩法

将命名空间调用链里的.式调用,改成[]式调用。如:页面中有好几处这样的调用:


a.replace(...)
bbb.replace(...)
c.replace(...).replace(...)

则可以改成:

var r = "replace";
a[r](...)
bbb[r](...)
ccc[r](...)[r](...)

虽然多了一个变量,但压缩后会减少不少字节(而且让代码更看不懂了)

本文来源:http://www.bbyears.com/wangyezhizuo/93431.html