# xjar(jar包加密打包部署) **Repository Path**: asurplus/xjar ## Basic Information - **Project Name**: xjar(jar包加密打包部署) - **Description**: SpringBoot中打jar包方式,并对jar包进行加密处理部署 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 4 - **Created**: 2022-06-23 - **Last Updated**: 2026-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## JAR包加密处理 ### 1、安装go环境 #### 1.1 Windows - 1.1.1 下载go安装包 ``` https://studygolang.com/dl/golang/go1.18.3.windows-amd64.msi ``` - 1.1.2 安装go ``` 默认安装即可,一路Next ``` - 1.1.3 配置环境变量 ``` 变量名:GOROOT 变量值:go的安装路径 ``` path 环境变量增加一行 ``` %GOROOT%\bin ``` - 1.1.4 验证 ``` go version ``` 出现版本号即表示安装成功 #### 1.2 Linux - 1.2.1 下载go安装包 ``` https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz ``` - 1.2.2 解压压缩包 ``` tar -C /usr/local/Go -zxvf go1.18.3.linux-amd64.tar.gz ``` - 1.2.3 配置环境变量 编辑文件 ``` vim /etc/profile ``` 文件最后,增加内容 ``` export GOROOT=/usr/local/Go export PATH=$PATH:$GOROOT/bin ``` 刷新,立即生效 ``` source /etc/profile ``` - 1.2.4 验证 ``` go version ``` 出现版本号即表示安装成功 ### 2、JAR包加密 #### 2.1、运行XjarUtil工具类 ``` /** * boot-jar包加密 */ public static void main(String[] args) { try { File plaintext = new File("E:\\xjar\\加密前\\test.jar"); File encrypted = new File("E:\\xjar\\加密后\\test.jar"); // boot的jar包加密 encryptBoot(plaintext, encrypted, PASSWORD); System.out.println("加密成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("加密失败"); } } ``` 加密后,目录中会生成两个文件 ``` test.jar xjar.go ``` #### 2.2、运行jar包 - 2.2.1 直接启动jar包 ``` java -jar test.jar ``` 跟着输入: ``` AES/CBC/PKCS5Padding ``` ``` 128 ``` ``` 128 ``` 加密的密码(我这边设置的密码是123) ``` 123 ``` - 2.2.2 将加密后的jar包改为可以正常启动的项目 打开CMD窗口,进入加密后的目录 ``` E: cd xjar/加密后 ``` 执行命令 ``` go build xjar.go ``` 可以看到目录中多了一个 xjar.exe 文件,启动jar包 ``` xjar java -jar test.jar ``` - 2.2.3 后台启动jar包(nohup 模式)(Linux下) ``` nohup xjar java -jar test.jar > nohup.out 2>&1 & ``` ## 3、高级篇 ### 3.1 加密过滤 - 3.1.1 包名过滤 ``` public static void encryptBoot(File plaintext, File encrypted, String password) throws Exception { XBoot.encrypt(plaintext, encrypted, password, (entry) -> entry.getName().startsWith("com.asurplus")); } ``` 这样就只加密了 com.asurplus 包下面的代码 - 3.1.2 Ant表达式过滤 ``` public static void encryptBoot(File plaintext, File encrypted, String password) throws Exception { XBoot.encrypt(plaintext, encrypted, password, new XJarAntEntryFilter("mapper/*Mapper.xml")); } ``` - 3.1.3 正则表达式过滤 ``` public static void encryptBoot(File plaintext, File encrypted, String password) throws Exception { XBoot.encrypt(plaintext, encrypted, password, new XJarRegexEntryFilter("mapper/(.+)Mapper.xml")); } ``` - 3.1.4 混合模式 ``` XEntryFilter and = XKit.and() .mix(new XJarAntEntryFilter("com/asurplus/**")) .mix(new XJarAntEntryFilter("*/**.class")); ``` ### 3.2 静态资源不加密 ``` XKit.not( XKit.or() .mix(new XJarAntEntryFilter("static/**")) .mix(new XJarAntEntryFilter("META-INF/resources/**")) ); ``` ## 参考文章 ``` https://www.jianshu.com/p/614e1d5358b2 ```