前端代码混淆加密

前端代码混淆加密

思路:使用node来获取初始化打包(dist)文件里面的所有js文件,然后利用加密插件进行代码的混淆加密

使用到的库:
	- fast-glob:文件系统遍历工具
	- javascript-obfuscator:代码混淆工具
	- fs:本地文件以及文件夹的相关操作
	- chalk:颜色插件
	- progress:显示进度条插件
	

代码如下:
const {sync} = require("fast-glob")
var JavaScriptObfuscator = require('javascript-obfuscator');
var {readFileSync, writeFileSync} = require('fs');
var {resolve} = require('path');
var Chalk = require('chalk');
var ProgressBar = require('progress');
const log = console.log;
import {Compiler} from "webpack"
const JavascriptObfuscatorServe = function (){

}

JavascriptObfuscatorServe.prototype.apply = function ({hooks}:Compiler){
    if (process.env.NODE_ENV === 'production') {
        hooks.done.tap('代码混淆钩子', () => {
            setTimeout(() => {
                const dir = 'dist'
                const dirArr = [`${dir}/**/*.js`]
                const files = sync(dirArr,{
                    ignore:[
                        `${dir}/*.js`,
                        `${dir}/js/chunk-vendors*.js`,
                        `${dir}/js/maps.js`,
                    ]
                })
                log(Chalk.blue('正在启动【javascript-obfuscator】代码混淆加密'));
                log(Chalk.yellow(`混淆加密对象:${dirArr}\n已扫描文件:${files.length} 个\n正在执行混淆加密,请稍等...`));
                const bar = new ProgressBar(`当前进度:percent :bar 已处理(${Chalk.green(':current/:total')})文件`, {
                    total: files.length,
                    width: 50
                });
                if(files.length === 0){
                    bar.tick();
                    if (bar.complete) {
                        log(Chalk.blue('【javascript-obfuscator】代码混淆加密完成'));
                        setTimeout(() => {
                            process.exit()
                        })
                    }
                    return
                }
                let index = 0;
                while (index < files.length){
                    const file = files[index]
                    const time = Date.now()
                    log(Chalk.yellow(`\n当前正在加密:${file}`));
                    const fileCode = readFileSync(file).toString('utf-8')
                    const obfuscationResult = JavaScriptObfuscator.obfuscate(fileCode,{
                        compact: true,
                        numbersToExpressions: true,
                        simplify: true,
                        stringArrayShuffle: true,
                        splitStrings: true,
                        stringArrayThreshold: 1,
                        unicodeEscapeSequence:true
                    });
                    writeFileSync(file, obfuscationResult.getObfuscatedCode(), 'utf-8')
                    log(Chalk.blue(`文件加密完成:${file}\n加密耗时:${Date.now() - time}ms`));
                    bar.tick();
                    if (bar.complete) {
                        log(Chalk.blue('【javascript-obfuscator】代码混淆加密完成'));
                        setTimeout(() => {
                            process.exit()
                        })
                    }
                    index ++;
                }
            })
        })
    }
}

module.exports = JavascriptObfuscatorServe


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值