老板要求内部算法模型加密,找了XJAR方法和proguard方法,XJAR很傻瓜,我调用不了里面的API,proguard软件需要配置的东西太多,也没有清晰的教程,因此选择了ClassFinal方法。
此种方法相比于proguard,采用maven仓库导入相应的依赖,再打包便可生成加密的jar包
目录
1.进行pom.xml配置,导入相应的依赖
pom.xml的配置
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<!-- 无密码模式-->
<password>#</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
<packages>com.itheima</packages>
<cfgfiles>application.properties</cfgfiles>
<excludes>org.spring</excludes>
<libjars></libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>
参数说明,其中重要的是password和packges,密码最好不要设置,我反正是不断报错,直接设成无密码格式,包名层级用.号隔开,跟springmvc扫描包的感觉差不多。这样子就可以把包下的文件全部进行加密,成如下的形式。
加密前
加密后
直接隐藏方法内容,非常给力
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个用","分割)
-libjars jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude 排除的类名(可为空,多个用","分割)
-classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd 加密密码,如果是#号,则使用无密码模式加密
-code 机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y 无需确认,不加此参数会提示确认以上信息
2.配置完pom.xml后,便可打包生成加密文件
加密文件如下形式
3.配置javaagent
完成后,打开jar包所在目录,输入cmd,打开命令行窗口,输入以下命令(注意将文件名改成自己加密文件的文件名)
java -javaagent:yourproject-encrypted.jar='-pwd 123' -jar yourproject-encrypted.jar
我输入的命令行(无密码模式)
java -javaagent:springboot_01_01_quickstart-0.0.1-SNAPSHOT-encrypted.jar -jar springboot_01_01_quickstart-0.0.1-SNAPSHOT-encrypted.jar
因为我设置的是无密码模式,程序直接跳转运行
项目成功运行,也成功加密,非常给力。我用的是JDK11版本,所支持的版本也非常高,proguard才支持JDK1.8,非常不行