原文地址: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 = '<a href="http://www.coding123.net">编程设计网</a><script type="text/javascript">alert(123)</'+'script>';
alert('“'+s+'”加密后内容为:“'+encrypt(s)+'”')
 </script>

C#加密保护HTML/javascript实现源代码

-收缩C#代码
    public string encrypt(string v)
    {
        if (string.IsNullOrEmpty(v)) return "";
        string s = "";
        long charCode;
        System.Text.Encoding unicode = System.Text.Encoding.Unicode;
        for (int i = 0, len = v.Length; i < len; i++)
        {
            charCode = (long)v[i];
            if (charCode >= 33 && charCode <= 79) s += ((char)(charCode + 47)).ToString();
            else if (charCode >= 80 && charCode <= 126) s += ((char)(charCode - 47)).ToString();
            else if ((charCode >= 0 && charCode <= 32) || (charCode >= 127 && charCode <= 133)) s += ((char)(charCode)).ToString() + ",";
            else s += ((char)(charCode - 5)).ToString() + "@";
        }
        return s;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string s = "<a href=\"http://www.coding123.net\">编程设计网</a>";
        Response.Write("“" + s + "”加密后内容为:“" + encrypt(s) + "”"); 
    }

vbscript加密保护HTML/javascript实现源代码

-收缩VBScript代码
function encrypt(v) 
  dim s,charcode,vlen
  vlen=len(v)
  for i=1 to vlen
    charcode=clng("&H"&(hex(AscW(mid(v,i,1)))))
    if charCode >= 33 and charCode <= 79 then
      s=s&chrw(charcode+47)
    elseif charCode >= 80 and charCode <= 126 then
      s=s&chrw(charcode-47)
    elseif (charCode >= 0 and charCode <= 32) or (charCode >= 127 and charCode <= 133) then
      s=s&chrw(charcode)&","
    else
      s=s&chrw(charcode-5)&"@"
    end if
  next
 encrypt=s
end function
dim v
v = "<a href=""http://www.coding123.net"">编程设计网</a>"
response.Write "“"&v&"”加密后内容为:“"&encrypt(v)&"”"

综合示例,JavaScript实现HTML/javascript源代码加密和解密

-收缩HTML代码  运行代码  [如果运行无效果,请自行将源代码保存为html文件运行]
<form method="post" onsubmit="return _de_encrypt(this)">
<b>要加密/解密的代码</b><br />
<textarea name="source" rows="6" cols="80"></textarea>
<br /><b>类型:</b><input type="radio" name="type"/>加密 <input type="radio" name="type"/>解密<br />
<b>加密/解密结果</b><br />
<textarea name="target" rows="6" cols="80" readonly="readonly"></textarea><br />
<input type="submit" value="开始"/></form>
<script type="text/javascript">
function _de_encrypt(f){
  if(f.source.value==''){alert('请输入“要加密/解密的代码”!');f.source.focus();return false;}
  if(!f.type[0].checked&&!f.type[1].checked){alert('请选择“类型”!');f.type[0].focus();return false;}
  f.target.value=window[f.type[0].checked?'encrypt':'decrypt'](f.source.value);
  return false;
}
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;
}
function decrypt(v){
  var i,charCode,s='',preIndex;
  for (i = 0; i < v.length; i++) {
    charCode = v.charCodeAt(i); 
    if (charCode >= 33 && charCode <= 79)s = s + String.fromCharCode(charCode + 47);
    else if (charCode >= 80 && charCode <= 126)s = s + String.fromCharCode(charCode - 47);
    else{
      preIndex = i + 1; 
      if (v.substr(preIndex, 1) == "@") s = s + String.fromCharCode(charCode + 5)
      else s = s + v.substr(i, 1);
      i++;
    }
  }
  return s;
}
 </script>

C#/vbscript/JS如何加密保护HTML/javascript源代码的更多相关文章

  1. javascript用户密码加密,js密码加密

    1.base64加密 在页面中引入base64.js文件,调用方法为: <!DOCTYPE HTML> <html> <head> <meta charset ...

  2. 加密解密及其javascript实现

    前端提交数据到后台,如果不适用https协议,则提交的数据就有被第三者窃取的可能.前端使用js来编码数据主要分为以下三种: 1.摘要算法 2.对称加密 3.非对称加密 下面分别介绍三种算法中对应的一个 ...

  3. js混淆加密,通过混淆Js代码让别人(很难)无法还原

    js混淆加密,通过混淆Js代码让别人(很难)无法还原   使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密 ...

  4. node.js 使用 UglifyJS2 高效率压缩 javascript 文件

    UglifyJS2 这个工具使用很长时间了,但之前都是在 gulp 自动构建 时用到了 UglifyJS 算法进行压缩. 最近玩了一下 UglifyJS2 ,做了一个 在线压缩javascript工具 ...

  5. DES加密解密 与 Cookie的封装(C#与js互相加密解密)

    2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)   这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方 ...

  6. js MD5加密后的字符串

    js MD5加密后的字符串 <script language="JavaScript"> /************************************** ...

  7. 转发:RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

  8. JS 的加密库简介

    作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的.虽然,前端的加密很容破解,但是有总比没有强. 尤其是涉及到用户名和密码, ...

  9. RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...

随机推荐

  1. Tk::Table

    <pre name="code" class="python"># DESCRIPTION # Tk::Table is an all-perl w ...

  2. bzoj1755 [Usaco2005 qua]Bank Interest

    Description Farmer John made a profit last year! He would like to invest it well but wonders how muc ...

  3. SQL省市区三级表结构

    -- 表的结构 areaDROP TABLE  area;CREATE TABLE  area (   id int NOT NULL ,  areaID int NOT NULL,  area va ...

  4. Hdu3498-whosyourdaddy(精确覆盖模板题)

    Problem Description sevenzero liked Warcraft very much, but he haven't practiced it for several year ...

  5. 【PAT L2-001】最短路计数

    给定一个无向带权网络,无负边,无重边和自环,每个顶点有一个正数权值.首先求特定原点s到终点d的最短路的个数:然后求所有最短路中顶点权值a[i]之和最大的那条,输出这条路径. 可用dijkstra算法求 ...

  6. hadoop执行hbase插入表操作,出错:Stack trace: ExitCodeException exitCode=1:(xjl456852原创)

    在执行hbase和mapreduce融合时,将hdfs上的文本文件插入到hbase中,我没有使用"胖包"(胖包就是将项目依赖的jar包放入项目打包后的lib目录中),而是直接将hb ...

  7. PHP性能优化学习笔记--PHP周边性能优化--来自慕课网Pangee http://www.imooc.com/learn/205

    PHP一般运行于Linux服务器中,周边主要包括:Linux运行环境.文件存储.数据库.缓存.网络 常见PHP场景的开销次序: 读写内存<<读写数据库(使用内存作为缓存.异步处理)< ...

  8. Eclipse中使用正则屏蔽Logcat中的某些Tag

    在使用Eclipse进行Android真机调试的时候经常会出现满屏幕的LogCat,即使设定了根据程序分类也不行 经常会有 Dalvikvm InputMethod这样的Tag出现 给自己的应用设定T ...

  9. IOS中对图片进行重绘处理的方法总结

    一.CGImageRef是什么 CGImageRef是定义在QuartzCore框架中的一个结构体指针,用C语言编写.在CGImage.h文件中,我们可以看到下面的定义: ? 1 typedef st ...

  10. Ubuntu12.04 Git 服务器详细配置

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,学过Linux的都知道,Git的优点我就不再多说了,我也是很喜欢Linux的.今天我们一起学习Git服务器在Ubunt ...