【Java】代码加密

本文介绍了Java类文件的加密方法,包括完全加密和字节码混淆,详细解析了ClassFinal工具的使用,包括命令行加密和Maven插件加密。加密后的类文件在运行时需要提供密码,支持无密码模式。启动加密后的jar包需指定密码和jar文件。该技术适用于保护代码安全,不影响第三方框架的正常使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见的class加密方式

  • 对class文件的字节码完全加密
  • 对class文件混淆:字节码混淆,主要思路就是的对类名,变量名和方法名,局部参数名进行替换

加密工具ClassFinal

基于字节码转换java版,其逻辑就是基于-agentJava:xxx.jar这一套原理,加密时对class文件做了两次处理,一次是对class文件的字节码完全加密,一次是对class文件混淆,这个混淆是保留成员和方法,对方法内部实现进行隐藏;解密时,判断如果该类是自己加密过的,找到完全加密的字节码进行解密,如果不是自己加密的就跳过。其对class文件混淆,就是方便类似SpringBoot等三方框架直接分析class文件。好处就是,如果你是个工具包,加密后给其它人,其他人编程时引用或者编译都不影响,但是运行时需要加密方支持,给出秘钥之类的。比较灵活和好用,也存在该方式的统一缺陷,不过其支持主程序jar加密,也支持单独的第三方工具jar加密。

1.加密

1.单独使用classfinal-fatjar.jardemo-1.0.10.jar进行加密会得到demo-1.0.10-encrypted.jar,两个文件需在同一个目录下

#加密
java -jar classfinal-fatjar-1.2.1.jar -file demo-1.0.10.jar -packages com.sjcredit.demo -cfgfiles application-dev.yml -pwd 123456 -Y
参数说明
-file        加密的jar/war完整路径
-packages    加密的包名(可为空,多个用","分割)
-libjars     jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles    需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude     排除的类名(可为空,多个用","分割)
-classpath   外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd         加密密码,如果是#号,则使用无密码模式加密
-code        机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y           无需确认,不加此参数会提示确认以上信息

2.maven插件进行加密

<plugin>
    <!-- https://gitee.com/roseboy/classfinal -->
    <groupId>net.roseboy</groupId>
    <artifactId>classfinal-maven-plugin</artifactId>
    <version>${classfinal.version}</version>
    <configuration>
        <password>000000</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
        <packages>com.yourpackage,com.yourpackage2</packages>
        <cfgfiles>application.yml</cfgfiles>
        <excludes>org.spring</excludes>
        <libjars>a.jar,b.jar</libjars>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>classFinal</goal>
            </goals>
        </execution>
    </executions>
</plugin>

运行mvn package时会在target下自动加密生成yourpaoject-encrypted.jar

2.启动加密后的jar

java -javaagent:demo-0.0.1-SNAPSHOT-encrypted.jar='-pwd 0000000' -jar demo-0.0.1-SNAPSHOT-encrypted.jar

3.说明

加密时-pwd参数设为#,启动时可不用输入密码

无密码模式,自动生成一个密码,密码会存在org.springframework.config.Pass中,启动时会自动从文件中获取

META-INF中 的被加密,BOOT-INF中的代码被混淆
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值