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

一行命令加密 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 的工作原理很简单:

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

相关推荐
后台模板学习32 分钟前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one33 分钟前
算法--构造
java·数据结构·算法
SL_staff1 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff2 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko72 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.2 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff2 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河4 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目
Escalating_xu5 小时前
【Linux 网络编程】五种 I/O 模型与非阻塞 I/O:从“等数据”到正确处理 EAGAIN
java·linux·网络
程序猿乐锅6 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight