一行命令加密 Spring Boot 项目,零代码侵入

7 阅读3分钟

一行命令加密 Spring Boot 项目,零代码侵入

前言

作为 Java 开发者,你是否遇到过这样的困扰:

  • 向客户交付项目时,担心核心代码被反编译?
  • Spring Boot 项目打包后,配置文件和依赖库完全暴露?
  • 想要限制软件运行期限或运行机器?

今天要介绍的开源工具 Flux Safety,一行命令就能解决这些问题!

什么是 Flux Safety?

Flux Safety 是一款面向 Java 应用交付的加密保护工具,主打"零代码侵入"理念:

  • 不修改业务源码 - 直接对编译产物加密
  • 一行命令完成 - 简单到极致
  • 强加密算法 - AES-256-GCM 分块加密
  • 灵活授权 - 机器绑定、过期控制

快速体验

1. 准备一个 Spring Boot 项目

假设你有一个 Spring Boot 项目 demo.jar

$ java -jar demo.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.x)

Started DemoApplication in 2.5 seconds

2. 加密项目

下载 Flux Safety 工具:

# 克隆项目
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

输出结果:

encrypted=/path/to/demo-secure.jar

3. 运行加密后的项目

$ java -jar demo-secure.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.x)

Started DemoApplication in 2.5 seconds

神奇的是: 加密后的项目运行效果和原来完全一样!

加密效果对比

让我们看看加密前后的文件差异:

加密前

$ 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
...

加密后

$ 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. 机器绑定

限制软件只能在指定机器运行:

# 绑定当前机器
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...

查看机器指纹:

$ java -jar flux-safety-tool.jar fingerprint
fingerprint=a1b2c3d4e5f6789012345678901234567890abcd

2. 过期控制

为项目添加使用期限:

# 生成 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. 自定义密钥

使用自己的加密密钥:

java -jar flux-safety-tool.jar encrypt \
    --input demo.jar \
    --output demo-secure.jar \
    --vendor-secret my-custom-secret-2026

技术原理

Flux Safety 的工作原理很简单:

  1. 加密阶段

    • 读取原始 JAR/WAR 文件
    • 使用 AES-256-GCM 算法加密整个文件
    • 生成包含元数据的新外壳 JAR
  2. 运行阶段

    • 外壳 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…