JavaScript奇淫技巧:用try、catch实现JS加密解密
本文分享一种奇特的JS加密解密方法。
原理
将JS加密,然后在try、catch错误捕捉语法中,用eval进行执行,能执行则说明解密成功,不能执行则会抛出错误,并由catch捕捉进行重新解密。
源码
加密部分:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN2YzM2EWZkRWY2YjM4kjZyYzX0UjNxcDM1EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
解密部分:
完整源码:
/*加密部分*/
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再次进行混淆加密,将得到更加安全的加密代码: