一行命令加密 Spring Boot 项目,零代码侵入
前言
作为 Java 开发者,你是否遇到过这样的困扰:
- 向客户交付项目时,担心核心代码被反编译?
- Spring Boot 项目打包后,配置文件和依赖库完全暴露?
- 想要限制软件运行期限或运行机器?
今天要介绍的开源工具 Flux Safety,一行命令就能解决这些问题!
什么是 Flux Safety?
Flux Safety 是一款面向 Java 应用交付的加密保护工具,主打"零代码侵入"理念:
- ✅ 不修改业务源码 - 直接对编译产物加密
- ✅ 一行命令完成 - 简单到极致
- ✅ 强加密算法 - AES-256-GCM 分块加密
- ✅ 灵活授权 - 机器绑定、过期控制
快速体验
1. 准备一个 Spring Boot 项目
假设你有一个 Spring Boot 项目 demo.jar:
bash
$ java -jar demo.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.x)
Started DemoApplication in 2.5 seconds
2. 加密项目
下载 Flux Safety 工具:
bash
# 克隆项目
git clone https://gitee.com/nm-remain-silent/flux-safety.git
cd flux-safety
mvn clean package
# 一行命令加密
java -jar flux-safety-tool/target/flux-safety-tool-1.0.0-all.jar \
encrypt \
--input demo.jar \
--output demo-secure.jar
输出结果:
ini
encrypted=/path/to/demo-secure.jar
3. 运行加密后的项目
bash
$ java -jar demo-secure.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.x)
Started DemoApplication in 2.5 seconds
神奇的是: 加密后的项目运行效果和原来完全一样!
加密效果对比
让我们看看加密前后的文件差异:
加密前
bash
$ ls -la demo.jar
-rw-r--r-- 1 user user 45.2M demo.jar
$ jar tf demo.jar | head -10
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/com/example/demo/
BOOT-INF/classes/com/example/demo/DemoApplication.class
BOOT-INF/lib/
BOOT-INF/lib/spring-boot-starter-2.7.0.jar
...
加密后
bash
$ ls -la demo-secure.jar
-rw-r--r-- 1 user user 45.3M demo-secure.jar
$ jar tf demo-secure.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/opencode/
com/opencode/fluxsafety/
com/opencode/fluxsafety/common/
com/opencode/fluxsafety/common/EncryptedJarLauncher.class
payload.bin
关键变化:
- 原始的
BOOT-INF/目录消失了 - 业务代码、依赖库全部被加密到
payload.bin - 只剩下加密解密的启动代码
高级功能
1. 机器绑定
限制软件只能在指定机器运行:
bash
# 绑定当前机器
java -jar flux-safety-tool.jar encrypt \
--input demo.jar \
--output demo-secure.jar \
--bind-current-machine
# 绑定指定指纹
java -jar flux-safety-tool.jar encrypt \
--input demo.jar \
--output demo-secure.jar \
--bind-fingerprint a1b2c3d4e5f6...
查看机器指纹:
bash
$ java -jar flux-safety-tool.jar fingerprint
fingerprint=a1b2c3d4e5f6789012345678901234567890abcd
2. 过期控制
为项目添加使用期限:
bash
# 生成 30 天有效期的许可证
java -jar flux-safety-tool.jar license \
--input demo-secure.jar \
--license-secret my-secret-2026 \
--days 30 \
--subject "客户A"
# 运行时会检查许可证
java -jar demo-secure.jar
# 如果过期:License expired at: 2026-04-15T10:30:00Z
3. 自定义密钥
使用自己的加密密钥:
bash
java -jar flux-safety-tool.jar encrypt \
--input demo.jar \
--output demo-secure.jar \
--vendor-secret my-custom-secret-2026
技术原理
Flux Safety 的工作原理很简单:
-
加密阶段:
- 读取原始 JAR/WAR 文件
- 使用 AES-256-GCM 算法加密整个文件
- 生成包含元数据的新外壳 JAR
-
运行阶段:
- 外壳 JAR 启动,验证授权
- 在临时目录解密原始文件
- 启动子 JVM 运行原始应用
- 退出时清理临时文件
与其他方案对比
| 方案 | 代码修改 | Spring Boot 支持 | 反编译难度 | 机器绑定 |
|---|---|---|---|---|
| ProGuard | ✅ 需要配置 | ⚠️ 需要调整 | ★★☆☆☆ | ❌ 不支持 |
| Native Image | ✅ 需要适配 | ⚠️ 有限制 | ★★★☆☆ | ❌ 不支持 |
| Flux Safety | ❌ 零侵入 | ✅ 完美支持 | ★★★★★ | ✅ 支持 |
开源地址
项目采用双许可模式:
- 个人/教育用途:GPL-3.0 开源
- 商业用途:需购买授权
🌟 项目地址 :gitee.com/nm-remain-s...
总结
Flux Safety 是目前最简单易用的 Java 加密方案:
- 一行命令完成加密
- 零代码侵入不影响原有逻辑
- 强加密算法保护代码安全
- 灵活授权满足商业需求
如果你正在寻找 Java 项目加密方案,不妨试试 Flux Safety。相信它的简单易用会让你惊喜!
作者 :流光(313708289@qq.com)
项目 :gitee.com/nm-remain-s...