C#/vbscript/JS如何加密保护HTML/javascript源代码
原文地址:http://www.coding123.net/article/20121008/encrypt-javascript-by-charp-vbscript.aspx
本文通过将源代码进行unicode转换后进行混淆加密,对HTML或者javascript源代码进行加密,将内容转换为一些看似乱码的内容,然后通过客户端的JS脚本反相解析回来。
HTML/javascript源代码加密混淆算法
1)ASCII编码内可见字符【33~126】,33~79进行+47操作操作,80~126进行-47操作
2)ASCII编码内部可见字符【0~32,127】,【128~133】,不操作,但是在后面增加【,】,变2个字符
3)其他,-5操作,后接@变2字符
客户端JS脚本解密函数
-收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script type="text/javascript">_$_ = ["", "\x77\x72\x69\x74\x65", "\x6c\x65\x6e\x67\x74\x68", "\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74", "\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65", "\x73\x75\x62\x73\x74\x72", "\x40", "\x65"];
var a = { e: function (__0, __1) { var __2, __3, __4, __5 = _$_[0]; if (__1 == 0) { eval(__5) } else if (__1 == 1) { document[_$_[1]](__0) } else { for (__3 = 0; __3 < __0[_$_[2]]; __3++) { { __2 = __0[_$_[3]](__3); if (__2 >= 33 && __2 <= 79) { __5 = __5 + String[_$_[4]](__2 + 47) } else if (__2 >= 80 && __2 <= 126) { __5 = __5 + String[_$_[4]](__2 - 47) } else { __4 = __3 + 1; if (__0[_$_[5]](__4, 1) == _$_[6]) { __5 = __5 + String[_$_[4]](__2 + 5) } else { __5 = __5 + __0[_$_[5]](__3, 1) } __3++ } } } a[_$_[7]](__5, 1) } } };
//使用方法
//a.e("被加密混淆过的HTML或者javascript代码")
a.e("k2 ,9C67lQ9EEAi^^HHH]4@5:?8`ab]?6EQm缑@稆@讹@讜@罌@k^2mkD4C:AE ,EJA6lQE6IE^;2G2D4C:AEQm2=6CEW`abXk^D4C:AEm");
script>
客户端JS脚本解密函数详解对照
-收缩JavaScript代码 //_$_ = ["", "\x77\x72\x69\x74\x65", "\x6c\x65\x6e\x67\x74\x68", "\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74", "\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65", "\x73\x75\x62\x73\x74\x72", "\x40", "\x65"];_$_ = ["", "write", "length", "charCodeAt", "fromCharCode", "substr", "@", "e"]
var a = { e: function (__0, __1) {
var __2, __3, __4
//, __5 = _$_[0];
, __5 = ""; //用来保存实际解码成功后的内容
if (__1 == 0) {
//eval(__5)
eval("")
}
else if (__1 == 1) {
//document[_$_[1]](__0)
document.write(__0);
}
else {
//for (__3 = 0; __3 < __0[_$_[2]]; __3++) {
for (__3 = 0; __3 < __0.length; __3++) {
{
//__2 = __0[_$_[3]](__3);
__2 = __0.charCodeAt(__3); //获取当前字符数字编码
//当编码大于等于33且小于79的时候,对当前编码执行+47操作然后生成字符
if (__2 >= 33 && __2 <= 79) {//80~126为实际编码
//__5 = __5 + String[_$_[4]](__2 + 47)
__5 = __5 + String.fromCharCode(__2 + 47)
}
//当编码大于等于80且小于126的时候,对当前编码执行+47操作然后生成字符
else if (__2 >= 80 && __2 <= 126) {//33~79为实际编码
//__5 = __5 + String[_$_[4]](__2 - 47)
__5 = __5 + String.fromCharCode(__2 - 47)
}
/*33~79:PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
80~126:!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO*/
else {//编码不在33~126之间
__4 = __3 + 1; //预读取
//if (__0[_$_[5]](__4, 1) == _$_[6]) { __5 = __5 + String[_$_[4]](__2 + 5) }
if (__0.substr(__4, 1) == "@") {//编码大于133的字符
//__5 = __5 + String[_$_[4]](__2 + 5)
__5 = __5 + String.fromCharCode(__2 + 5)
}
else {//ASCII表示范围内的不可见字符
// __5 = __5 + __0[_$_[5]](__3, 1)
__5 = __5 + __0.substr(__3, 1)
}
__3++;//通过算法2),3)知道这些内容占用2个字符,所以循环变量++到下一个字符
}
}
}
//a[_$_[7]](__5, 1)
//==>等价于
// a.e(__5, 1);
//==>等价于
document.write(__5);
}
}
};
下面贴出算法加密保护HTML/javascript实现源代码
javascript加密保护HTML/javascript实现源代码,一般很少用,因为是客户端的,不好直接读取文件进行加密
-收缩HTML代码 运行代码 [如果运行无效果,请自行将源代码保存为html文件运行] <script type="text/javascript">function encrypt(v) {
var s = '',charCode;
for (var i = 0, len = v.length; i < len; i++) {
charCode = v.charCodeAt(i);
if (charCode >= 33 && charCode <= 79) s += String.fromCharCode(charCode + 47);
else if (charCode >= 80 && charCode <= 126) s += String.fromCharCode(charCode - 47);
else if ((charCode >= 0 && charCode <= 32) || (charCode >= 127 && charCode <= 133)) s += String.fromCharCode(charCode) + ',';
else s += String.fromCharCode(charCode - 5)+'@';
}
return s;
}
var s = '编程设计网
