巧用try、catch实现JS代码加密

本文介绍了一种利用try、catch和eval实现JavaScript代码加密的方法。通过异或加密技术对源代码进行加密,然后在解密过程中尝试用eval执行解密后的代码,如果执行成功则解密完成,失败则重新解密。这种方法适用于需要执行的加密语句,如包含alert或console.log等。文章还提到了二重加密以增强安全性,但指出该方法依赖eval,可能有执行风险。

巧用try、catch实现JS代码加密

本文分享一种奇特的JS代码加密解密方法。

技术原理

将JS代码加密,然后在try、catch错误捕捉语法中,用eval进行执行,能执行则表明解密成功,不能执行则意味着解密出错,此时会抛出错误,并由catch捕捉进行重新解密。

源码解析

加密部分:

解密部分:

完整源码

    /*加密部分*/
    var source_string ='alert("JShaman提供专业的JavaScript代码混淆加密");';
    var encoded_string = "";
    function encode(){
        for(var i=0;i<source_string.length;i++){
            //异或加密每一个字符,异或密钥:61
            encoded_string += String.fromCharCode(source_string.charCodeAt(i)^61);
        }
        alert(encoded_string);
        console.log("加密完成:",encoded_string);
    }
    encode();
    /*解密部分*/
    //初始解密密钥,初始设为0,可为小于加密字符长度的任意值
    var encode_key = 0;
    //解密后的字符串,初始为加密值
    var decoded_string = encoded_string;
    function decode(){
        try{
           
            //eval执行,能执行则说明解密成功,因为原始代码是alert,是能正确执行的语句
            eval(decoded_string);
            console.log("解密成功:", decoded_string);
        }catch(e){
            decoded_string ="";
            for(var i=0; i<encoded_string.length; i++){
                decoded_string += String.fromCharCode(encoded_string.charCodeAt(i) ^ encode_key );
            }
            encode_key += 1;
            decode();
        }
    }
    decode();
   

二重加密

如果把以上代码,用JShaman再次进行混淆加密,将得到更加安全的加密代码:

也可用Ty2y进行JS代码混淆加密:

得到的加密代码:

运行效果

注意事项

这是一种思路新奇的加密手段,但此方法有一定的使用条件限制:因解密时要依赖eval执行,因此被加密的语句需要是可执行的,比如需包裹在alert、console.log等等语句中。

保护您的js代码; 演示代码: function Save_View() { var idx =document.getElementById("idx");//项目ID var xmmc =document.getElementById("xmmc");//项目名称 var szqy =document.getElementById("szqy");//所在区域 var kfsmc =document.getElementById("kfsmc");//开发商名称 var xxdz =document.getElementById("xxdz");//详细地址 var zjzmj =document.getElementById("zjzmj");//总建筑面积 if(xmmc.value=="") { alert("请填写项目名称"); xmmc.focus(); return false; } if(kfsmc.value=="") { alert("请填写开发商名称"); kfsmc.focus(); return false; } if(xxdz.value=="") { alert("请填写详细地址"); xxdz.focus(); return false; } if(zjzmj.value=="") { alert("请填写总建筑面积"); zjzmj.focus(); return false; } } 加密代码: function Save_View() { var Jy_eNph1 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x69\x64\x78");//项目ID var E2 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x78\x6d\x6d\x63");//项目名称 var gEXwty3 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x73\x7a\x71\x79");//所在区域 var jH4 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x6b\x66\x73\x6d\x63");//开发商名称 var bbSRLoGP5 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x78\x78\x64\x7a");//详细地址 var dY_boQtws6 =window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]("\x7a\x6a\x7a\x6d\x6a");//总建筑面积 if(E2["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u9879\u76ee\u540d\u79f0"); E2["\x66\x6f\x63\x75\x73"](); return false; } if(jH4["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u5f00\u53d1\u5546\u540d\u79f0"); jH4["\x66\x6f\x63\x75\x73"](); return false; } if(bbSRLoGP5["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u8be6\u7ec6\u5730\u5740"); bbSRLoGP5["\x66\x6f\x63\x75\x73"](); return false; } if(dY_boQtws6["\x76\x61\x6c\x75\x65"]=="") { window["\x61\x6c\x65\x72\x74"]("\u8bf7\u586b\u5199\u603b\u5efa\u7b51\u9762\u79ef"); dY_boQtws6["\x66\x6f\x63\x75\x73"](); return false; } } 变量完全是随机的,很好很实用。 喜欢就下载喽··~~
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值