Java使用xjar加密jar包

一、环境准备

  • Java环境
  • Go环境

二、快速开始

  • JDK 1.7 +

1、引入依赖

<project>
<!-- 设置 jitpack.io 仓库 -->
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<!-- 添加 XJar 依赖 -->
<dependencies>
<dependency>
<groupId>com.github.core-lib</groupId>
<artifactId>xjar</artifactId>
<version>4.0.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
  • 必须添加 https://jitpack.io Maven仓库.
  • 如果使用 JUnit 测试类来运行加密可以将 XJar 依赖的 scope 设置为 test.

注意:

  • 由于使用了阿里云Maven镜像可能导致无法从 jitpack.io 下载 XJar 依赖的问题
  • 在镜像配置的 mirrorOf 元素中加入 ,!jitpack.io 结尾.
  • 参考:
    <mirror>
    <id>alimaven</id>
    <mirrorOf>central,!jitpack.io</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    </mirror>

2、加密Jar包

  • 引入上面得依赖之后,给你的项目打包:mvn clean package -Dmaven.test.skip=true
  • 然后得到未加密的Jar包,之后使用xjar加密原包如下:
@SpringBootTest
class EncryptJarTest {

// Jar包加密
public static void main(String[] args) throws Exception {
String projectPath = System.getProperty("user.dir");
String srcjar = projectPath+"/target/myJarName.jar";
String encryptJar = projectPath+"/target/myJarName-encrypt.jar";
XCryptos.encryption()
//jar包生成的路径
.from(srcjar)
//密码
.use("yourPassword")
//加密后生成的路径
.to(encryptJar);
// 设置哪些文件需要加密、哪些不加密
// .include("/io/xjar/**/*.class")
// .include("/mapper/**/*Mapper.xml")
// .exclude("/static/**/*")
// .exclude("/conf/*")
}

}
  • 运行上面的加密代码之后会多生成两个文件:
  • ①、myJarName-encrypt.jar这个就是加密后的jar包
  • ②、xjar.go这个是Go启动器源码文件,通过不同平台编译这个可得对应平台得可执行程序
方法名称参数列表是否必选方法说明
from(String jar)二选一指定待加密JAR包路径
from(File jar)指定待加密JAR包文件
use(String password)二选一指定加密密码
use(String algorithm, int keysize, int ivsize, String password)指定加密算法及加密密码
include(String ant)可多次调用指定要加密的资源相对于classpath的ANT路径表达式
include(Pattern regex)可多次调用指定要加密的资源相对于classpath的正则路径表达式
exclude(String ant)可多次调用指定不加密的资源相对于classpath的ANT路径表达式
exclude(Pattern regex)可多次调用指定不加密的资源相对于classpath的正则路径表达式
to(String xJar)二选一指定加密后JAR包输出路径, 并执行加密.
to(File xJar)指定加密后JAR包输出文件, 并执行加密.
  • 指定加密算法的时候密钥长度以及向量长度必须在算法可支持范围内, 具体加密算法的密钥及向量长度请自行百度或谷歌.
  • includeexclude 同时使用时即加密在include的范围内且排除了exclude的资源.

3、编译生成可执行程序与运行加密Jar包

  • 如上,得到xjar.go 源文件,编译可得对应平台可执行程序

    go build xjar.go
  • 将 xjar.go 在不同的平台进行编译即可得到不同平台的启动器可执行文件, 其中Windows下文件名为 xjar.exe 而Linux下为 xjar.

  • 用于编译的机器需要安装 Go 环境, 用于运行的机器则可不必安装 Go 环境, 具体安装教程请自行搜索.

  • 由于启动器自带JAR包防篡改校验, 故启动器无法通用, 即便密码相同也不行.

启动加密包:

/path/to/xjar /path/to/java [OPTIONS] -jar myJarName-encrypt.jar 


# 例如
nohup /path/to/xjar java -jar /opt/myJarName-encrypt.jar >out.log 2>&1 &
  • 在 Java 启动命令前加上编译好的Go启动器可执行文件名(xjar)即可启动运行加密后的JAR包.

三、插件集成

-------------本文结束 感谢您的阅读-------------