XJar:Spring Boot JAR 安全加密執行工具,支援原生 JAR
XJar
Spring Boot JAR 安全加密執行工具,同時支援的原生JAR。
基於對JAR包內資源的加密以及拓展ClassLoader來構建的一套程式加密啟動,動態解密執行的方案,避免原始碼洩露或反編譯。
功能特性
- 無需侵入程式碼,只需要把編譯好的JAR包通過工具加密即可。
- 完全記憶體解密,杜絕原始碼以及位元組碼洩露或反編譯。
- 支援所有JDK內建加解密演算法。
- 可選擇需要加解密的位元組碼或其他資原始檔,避免計算資源浪費。
環境依賴
JDK 1.7 +
使用步驟
<project> <!-- 設定 jitpack.io 倉庫 --> <repositories> <repository> <id>jitpack.io</id> <url>https://www.jitpack.io</url> </repository> </repositories> <!-- 新增 XJar 依賴 --> <dependencies> <dependency> <groupId>com.github.core-lib</groupId> <artifactId>xjar</artifactId> <version>LATEST_VERSION</version> </dependency> </dependencies> </project>
// Spring-Boot Jar包加密 public static void main(String[] args) { String password = "io.xjar"; File plaintext = new File("/path/to/read/plaintext.jar"); File encrypted = new File("/path/to/save/encrypted.jar"); XBoot.encrypt(plaintext, encrypted, password); }
// Spring-Boot Jar包解密 public static void main(String[] args) { String password = "io.xjar"; File encrypted = new File("/path/to/read/encrypted.jar"); File decrypted = new File("/path/to/save/decrypted.jar"); XBoot.decrypt(encrypted, decrypted, password); }
// Jar包加密 public static void main(String[] args) { String password = "io.xjar"; File plaintext = new File("/path/to/read/plaintext.jar"); File encrypted = new File("/path/to/save/encrypted.jar"); XJar.encrypt(plaintext, encrypted, password); }
// Jar包解密 public static void main(String[] args) { String password = "io.xjar"; File encrypted = new File("/path/to/read/encrypted.jar"); File decrypted = new File("/path/to/save/decrypted.jar"); XJar.decrypt(encrypted, decrypted, password); }
// 命令列執行JAR java -jar /path/to/encrypted.jar // 在提示輸入密碼的時候輸入密碼後按回車即可正常啟動,也可以通過傳參的方式直接啟動 java -jar /path/to/encrypted.jar --xjar.password=PASSWORD
引數說明
- --xjar.algorithm加解密演算法名稱,預設為AES,支援JDK所有內建演算法,如AES / DES ...
- --xjar.keysize金鑰長度,預設為128,根據不同的演算法選取不同的金鑰長度。
- --xjar.ivsize向量長度,預設為128,根據不同的演算法選取不同的向量長度。
- --xjar.password密碼
進階用法
// 只加密自身專案及相關模組的原始碼不加密第三方依賴,可以通過XJarArchiveEntryFilter來定製需要加密的JAR包內資源 public static void main(String[] args) { String password = "io.xjar"; File plaintext = new File("/path/to/read/plaintext.jar"); File encrypted = new File("/path/to/save/encrypted.jar"); XBoot.encrypt(plaintext, encrypted, password, new XJarArchiveEntryFilter() { @Override public boolean filter(JarArchiveEntry entry) { return entry.getName().startsWith("/BOOT-INF/classes/") || entry.getName().startsWith("/BOOT-INF/lib/jar-need-encrypted"); } }); }
變更記錄
-
v1.0.5
- 支援並行類載入,需要JDK1.7+的支援,可提升多執行緒環境類載入的效率
- Spring-Boot JAR 包加解密增加一個安全過濾器,避免無關資源被加密造成無法執行
- XBoot / XJar 工具類中增加多個按檔案路徑加解密的方法,提升使用便捷性
- v1.0.4 小優化
- v1.0.3 增加Spring-Boot的FatJar加解密時的預設過濾器,避免由於沒有提供過濾器時加密後的JAR包不能正常執行。
- v1.0.2 修復中文及空格路徑的問題
- v1.0.1 升級detector框架
- v1.0.0 第一個正式版釋出
協議宣告
ICENSE-2.0" rel="nofollow,noindex" target="_blank">Apache-2.0
聯絡作者
QQ 646742615 不會釣魚的兔子