技术标签: xjar加密后运行错误
XJar — Spring-Boot JAR 包加密运行工具,避免源码泄露以及反编译。
Spring Boot JAR安全加密运行工具,同时支持原生的JAR。
基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动,动态解密运行的方案,避免源码泄露或反编译。
功能特性
无需侵入代码,只需要把编译好的JAR包通过工具加密即可。
完全内存解密,杜绝源码以及字节码泄露以及反编译。
支持所有JDK内置加解密算法。
可选择需要加解密的字节码或其他资源文件,避免计算资源浪费。
环境依赖
JDK 1.7 +
使用步骤
jitpack.io
https://www.jitpack.io
com.github.core-lib
xjar
LATEST_VERSION
// 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 第一个正式版发布
协议声明
CSDN Android客户端 下载就送50C币 扒一扒最NB的开发项目 我发课题,大家投票 最流行的语言都在这,想学就学! 打工与乘公交2015-04-30 11:26 269人阅读 评论(5)收藏 举报 去一个公司打工就如同上了一辆公交车。在上车之前,你应该清楚自己打算去哪里,打算在哪里下车。有的公交车很豪华,有的很破
一、重写PropertyPlaceholderConfigurer的方法package com.gh.order.tools;import java.util.Properties;import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanInitializa...
设有两台机器:A:192.0.0.101及 B: 192.0.0.102。目的:把A下的/temp/var/下的所有文件拷贝到B机器/test/目录下:1 进入B机器:#scp [email protected]:/temp/var/* /test/或2 进入A机器:scp /temp/var/* [email protected]:/test/根据提示输入yes及另外机器的root密码,即可拷贝
图书说明: 跨平台桌面应用程序将指导您逐步使用GitHub中的NW.js和Electron创建Node.js桌面应用程序。电子的创造者程昭的前言。 关于BooK 跨平台桌面应用程序将指导您使用Electron和NW.js逐步开发桌面应用程序。这个示例填充指南向您展示了如何创建自己的文...
·第三方模块的安装 pip install 模块名以pip install schedule为例·第三方模块的使用 import 模块名使用schedule:import scheduleimport timedef job(): print('哈哈----------嗝')schedule.every(3).seconds.do(job)while True: schedule.run_pending() t...
状压DP题意: 有n门作业,每门作业都有最晚完成时间以及完成该作业需要的天数, 过了最晚完成时间后一天减一分,问最后最少减多少分就可以完成所有作业以及输出做作业的顺序思路:因为最多有15门作业,所以考虑状态压缩, 做n门作业时可以由做n-1门作业时再做一门转化而来;递推方程:dp[i|(1 << j)] = min(dp[i] + ju, dp[i|(1 << j)...
Michael Nielsen在他的在线教程《neural networks and deep learning》中讲得非常浅显和仔细,没有任何数据挖掘基础的人也能掌握神经网络。英文教程很长,我捡些要点翻译一下。感知机\begin{equation}output=\left\{\begin{matrix}0 &amp; if\;\sum_i{w_ix_i} \le threshold ...
Linux 安装我觉得比较头疼的是软件的安装配置,其他还好
STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first,
基于权重的集群驱逐介绍基于权重的集群驱逐(Server Weight-Based Node Eviction)是一项Oracle 12.2版本引入的一项新特性。在此之前,Oracle集群在处理脑裂问题时,通过判断子群(各自独立)的规模情况,来决定在脑裂问题发生时,终止哪个子群,判断的依据如下:如果子群规模(包含节点数量)不等,则大的子群获胜,例如,{1} {2,3,4}后者获胜
MATLAB学习(二):结构化程式与自定义函数假期学习第二天,今天起晚了,因为昨晚发现了一个up主好搞笑呀,看到一点半他的视频。刚刚交了一篇关于秦直道的科普文,现在开始继续学习MATLABscript脚本必须要保存后才能运行,不能数字开头,并且大小写有差别的要运行脚本时可以点击运行或者是按f5要是不想执行某一行程序,可以删除或者是在前面加入一个百分号%,使其变成注释当在一段程序前后分别加入两个百分号%%时(这两个百分号必须是自己手动输入的),可将这一段程序与整篇代码区分开,他会变成一个单独的节
达内课程-Activity