首页 > web > 前端

js文件代码加密和VUE文件代码加密算法

admin2019--06-21共有622人围观
vue, js
简介js文件代码加密和VUE文件代码加密算法

由于我们的项目是基于vue-cli脚手架开发的,因此首先想到的是其中的webpack插件UglifyJsPlugin是否提供js代码加密的配置。查询UglifyJsPlugin官方手册后发现该插件提供代码压缩及混淆功能,可以对代码进行压缩,变量、函数名替换为简单字母,降低了源码的可读性,一定程度上达到了加密的目的,但是加密级别没有达到我们的要求。因此只能亲自动手找找是否有现成的开源加密算法,拿过来借用一下。


在网上找到一篇 vue-cli脚手架开发项目如何进行js高级加密 他的思路很好,符合我们的要求,但是最终写玩后,发现这个jjencode加密后的文件无法运行,可能他对代码的规范要求比较高,但是实际环境中无法使用的话,也是无法满足需求的,现在加密思路有了,那么就差加密算法了。


寻找很多资料,发现JS加密算法真的很少,几乎没有可以使用的,那么就自己模仿一个写一个加密函数吧。

var key="VFdWdVoxRnBZVzVu";
function myEncode(str)
{
    var s_arr=str.split('\n');
    var keyLength=parseInt(key.length/s_arr.length);
    var res="";
    for(var i=0;i<s_arr.length;i++)
    {
		res+="[";  
		for(var j=0,l=s_arr[i].length-1;j<s_arr[i].length;j++) { 
			res+="0x"+(s_arr[i].charCodeAt(j)^key.charCodeAt(i*keyLength+l--%keyLength)).toString(16)+(j<s_arr[i].length-1?",":""); 
		}
		res+="]"+(i<s_arr.length-1?",":"");  
        res+=i<s_arr.length-1?"\\n":"";  
    }    
    return res;
}

示例:

var code='alert(123123123)';
var encode=myEncode(code);
console.log(encode);
结果:[0x14,0x3a,0x1f,0x24,0x2e,0x6a,0x5f,0x60,0x4b,0x5e,0x64,0x57,0x66,0x56,0x75,0x7f]

但是这样加密获得的代码,JS是无法运行的。那么就要对应的解密函数。

var key = "VFdWdVoxRnBZVzVu";
function doit(str)
{
	var pwArr=str.replace(/(\[)*(\],)*(\])*/ig,"").split("\n");
	for(var i=0;i<pwArr.length;i++){
		pwArr[i] = pwArr[i].split(",");
	}
	var keyLength=parseInt(key.length/pwArr.length);
	var res="";
	for(var i=0;i<pwArr.length;i++)
	{
		var t_arr=pwArr[i];
		for(var j=0,l=t_arr.length-1;j<t_arr.length;j++) {
			if (t_arr[j] !== "") {
				res += String.fromCharCode(t_arr[j] ^ key.charCodeAt(i * keyLength + l-- % keyLength));
			}
		}
	}
	eval(res);
}

这样在一个核心js里面写入解密函数,所有JS加密后

doit(encode);

就可以运行了。

最后,可以把解密函数再次用加密工具加密一下,

window["\x65\x76\x61\x6c"](String.fromCharCode.apply(null,'118з97з114з32з107з101з121з61з34з86з70з100з87з100з86з111з120з82з110з66з90з86з122з86з117з34з59з102з117з110з99з116з105з111з110з32з100з111з105з116з40з115з116з114з41з123з118з97з114з32з112з119з65з114з114з61з115з116з114з46з114з101з112з108з97з99з101з40з47з40з92з91з41з42з40з92з93з44з41з42з40з92з93з41з42з47з105з103з44з34з34з41з46з115з112з108з105з116з40з34з92з110з34з41з59з102з111з114з40з118з97з114з32з105з61з48з59з105з60з112з119з65з114з114з46з108з101з110з103з116з104з59з105з43з43з41з123з112з119з65з114з114з91з105з93з61з112з119з65з114з114з91з105з93з46з115з112з108з105з116з40з34з44з34з41з125з118з97з114з32з107з101з121з76з101з110з103з116з104з61з112з97з114з115з101з73з110з116з40з107з101з121з46з108з101з110з103з116з104з47з112з119з65з114з114з46з108з101з110з103з116з104з41з59з118з97з114з32з114з101з115з61з34з34з59з102з111з114з40з118з97з114з32з105з61з48з59з105з60з112з119з65з114з114з46з108з101з110з103з116з104з59з105з43з43з41з123з118з97з114з32з116з95з97з114з114з61з112з119з65з114з114з91з105з93з59з102з111з114з40з118з97з114з32з106з61з48з44з108з61з116з95з97з114з114з46з108з101з110з103з116з104з45з49з59з106з60з116з95з97з114з114з46з108з101з110з103з116з104з59з106з43з43з41з123з105з102з40з116з95з97з114з114з91з106з93з33з61з61з34з34з41з123з114з101з115з43з61з83з116з114з105з110з103з46з102з114з111з109з67з104з97з114з67з111з100з101з40з116з95з97з114з114з91з106з93з94з107з101з121з46з99з104з97з114з67з111з100з101з65з116з40з105з42з107з101з121з76з101з110з103з116з104з43з108з45з45з37з107з101з121з76з101з110з103з116з104з41з41з125з125з125з101з118з97з108з40з114з101з115з41з125'.split(/з/ig)))

这样就完全看不出JS文件代码了。

文章评论

评论列表(0)

发表评论 取消回复

微信公众账号

微信扫一扫加关注