关键词:javascript 混淆 JsObfuscator Jsmin custom_rhino.jar
现在基于javascript的应用越来越复杂,为了提高代码的安全性和下载速度,需要对代码进行混淆和压缩。以前研究过几天js混淆,现在项目需要又拉出来溜溜,发现不少问题。简单讨论下三种我找到的混淆方法,以及改进。
一、JsObfuscator 是一个可执行的混淆压缩器,主要进行变量,函数名替换,去掉注释空行换行,压缩率比较好 。有两个地方让我觉得不爽,它每次只能压缩一人文件,它还会在每个函数结束后加个“;”,这应该不符合js的语法。当然牛人可以写个程序循环处理,但不知道能不能生成自己想要得目录,不利于发布代码。可配置性差。
二、第二个常用的是jsmin,他又c版本和php两个版本,都是源码。像我这样做web基本把c交给老师了,最简单也得找个turbo c,好像也有人用.net给它写了个界面,还得装.net环境,c版也被pass了。 了解php开发的可以用php版了,刚好前两天学了下php,就现学现卖吧。
2.把jsmin.php放在apache的htdocs目录下。
3.写个compress.php
require 'jsmin.php';
// Output a minified version of example.js. echo JSMin::minify(file_get_contents('1039map.js'));
?>
他直接把代码输出到页面,这有个鸟用啊,不过有源码,可以改造它的先天不良基因。 我给它加了两个方法,一个建文件夹(存放压缩后的代码),一个新建压缩文件,并改造了minify()方法。
///创建文件夹
public function createdir($dir) {
if(file_exists($dir) && is_dir($dir)){ }
else{ mkdir ($dir,0777); }
}
///创建文件
function creat_file($PATH,$name) {
$sFile = $name; if (file_exists($PATH.$sFile)) { creat_file(); }
else { $fp= fopen($PATH.$sFile,"w"); fclose($fp); }
return $sFile;
}
//$js:压缩文件名 ,$folder :存储路径,$fileName :压缩后的文件名
public static function minify($js,$folder,$fileName) {
$jsmin = new JSMin($js);
$file = $jsmin->creat_file($folder,$fileName);
$content = $jsmin->min();
$fp = fopen($folder.$fileName, 'w+');
fwrite($fp, $content);
fclose($fp);
return $jsmin->min(); }
调用页面代码compress.php:
echo JSMin::createdir("js_compress");
echo JSMin::minify(file_get_contents('index.js'),"js_compress/",'index.js');
?>
当然你可以compress.php执行多个压缩 。
未完待续。