SpringBoot 项目 引入ClassFinal 解决代码加密和机器码绑定问题

场景

这边用 springboot 开发打包后得到 jar 包,要在客户机器上部署,有防反编译和绑定唯一id的需求

引入

https://gitee.com/roseboy/classfinal.git

Maven 插件方式引入

<plugin>
                <groupId>net.roseboy</groupId>
                <artifactId>classfinal-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <!--  加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码,当为 # 时不加密 -->
                    <password>xxxx</password>
                    <!-- 加密的包名(可为空,多个用","分割) -->
                    <packages>io.renren</packages>
                    <!--  配置说明文件,如果没有特殊的打包要求可以注销 cfgfiles 标签  -->
                    <cfgfiles>application.yml</cfgfiles>
                    <code>xxxx</code>
                    <!--  排除的类名(可为空,多个用","分割) -->
<!--                    <excludes>org.spring</excludes>-->
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>classFinal</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

打包

会看到得到一个 xxx-encrypted.jar

启动时可以看到提示需要输入密码

java -javaagent:xxx-encrypted.jar -jar xxx-encrypted.jar

绑定机器码

https://gitee.com/link?target=https%3A%2F%2Frepo1.maven.org%2Fmaven2%2Fnet%2Froseboy%2Fclassfinal-fatjar%2F1.2.1%2Fclassfinal-fatjar-1.2.1.jar

# 部署的机器上运行
java -jar classfinal-fatjar.jar -C

配置文件的 code 里面 配置待部署的机器上生成的 code

就能实现绑定机器码了

TODO

其实还剩下一个后台运行输入 passwd 的需求没实现,这里挺矛盾的,所以实际用的时候我没设置密码,password 那一行注释掉了,后面再填坑吧

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。 项目模块说明: classfinal-core:ClassFinalde的核心模块,几乎所有加密代码都在这里; classfinal-fatjar:ClassFinal打包成独立运行的jar包; classfinal-maven-plugin:ClassFinal加密的maven插件; 功能特性: 无需修改原项目代码,只要把编译好的jar/war包用本工具加密即可。 运行加密项目时,无需求修改tomcat,spring等源代码。 支持普通jar包、springboot jar包以及普通java web项目编译的war包。 支持spring framework、swagger等需要在启动过程中扫描注解或生成字节码的框架。 支持maven插件,添加插件后在打包过程中自动加密。 支持加密WEB-INF/lib或BOOT-INF/lib下的依赖jar包。 环境依赖: JDK 1.8 + 本工具使用AES算法加密class文件,密码是保证不被破解的关键,请保存好密码,请勿泄漏。 密码一旦忘记,项目不可启动且无法恢复,请牢记密码。 本工具加密后,原始的class文件并不会完全被加密,只是方法体被清空,保留方法参数、注解等信息,这是为了兼容spring,swagger等扫描注解的框架; 方法体被清空后,反编译者只能看到方法名和注解,看不到方法的具体内容;当classclassloader加载时,真正的方法体会被解密注入。
Spring Boot 项目中,我们可以使用 Spring Security 提供的 BCryptPasswordEncoder 类来实现密码加密和解密。 1. 导入 Spring Security 依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 加密密码 在注册或修改密码时,需要将明文密码加密后再存储到数据库中。可以通过以下代码实现密码加密: ```java import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; String password = "123456"; BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String hashedPassword = passwordEncoder.encode(password); ``` 其中,`password` 是需要加密的明文密码,`passwordEncoder` 是一个 BCryptPasswordEncoder 对象,`hashedPassword` 是加密后的密码。 3. 验证密码 在用户登录时,需要将用户输入的密码与数据库中的加密密码进行比较。可以通过以下代码实现密码验证: ```java import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; String password = "123456"; String hashedPassword = "$2a$10$L0H8jxHr6xQe3xHbBsQnBuX8Kq4oL0X0qZt6N1PfX6X4Ck4fFK7sW"; BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); boolean result = passwordEncoder.matches(password, hashedPassword); ``` 其中,`password` 是用户输入的密码,`hashedPassword` 是从数据库中读取出来的加密密码,`passwordEncoder` 是一个 BCryptPasswordEncoder 对象,`result` 表示密码验证的结果,如果密码匹配成功则返回 true,否则返回 false。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值