jfinalQ开发教程03-加密部署

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uikoo9/article/details/49022221

codebook-app-icon-ramotion_1x.png

jfinalQ-encrypt

1.简介

加密class文件,防止反编译,可自定义加密解密算法,支持tomcat部署,非spring框架。


2.原理

首先将class文件进行字节流加密,

然后自定义tomcat的ClassLoader,

最后通过自定义的ClassLoader解密并加载class。


3.下载

已经开源到github,地址:https://github.com/uikoo9/jfinalQ-encrypt


4.项目结构

1.png

QEncryptFrame.java是加密解密class的gui工具

QClassLoader.java是自定义的ClassLoader

loader.properties是配置文件

QClassUtil.java是加密解密算法,可以自行修改


准备工作

1.配置文件

配置文件中有两项:

encrypted_package=com.uikoo9.fore,com.uikoo9.manage,com.uikoo9.z
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/

encrypted_package

需要进行加密解密的包,

一般的javaee项目都比较大,对整个项目进行加密解密是不现实的,所以推荐对核心代码进行加密解密,

这里的包名就是核心代码的包名,多个包名用逗号分隔。

encrypted_class_path

tomcat中项目的classess文件夹路径


2.自定义加密解密算法

jfinalQ-encrypt中的加密解密算法如下:

package com.uikoo9;

/**
 * 加密解密程序,可以自己定义算法
 * @author qiaowenbin
 */
public class QClassUtil {
	
	/**
	 * 加密程序,可以自己修改
	 * @param ch
	 * @return
	 */
	public static byte encrypt(int ch){
		return (byte) (ch + 2);
	}
	
	/**
	 * 解密程序,可以自己修改
	 * @param ch
	 * @return
	 */
	public static byte decrypt(int ch){
		return (byte) (ch - 2);
	}
	
}

可以看到就是简单的对字节流进行移位,可以自己定义加密解密算法。


3.生成class代码

如果使用eclipse等,可以clean一下项目,这时会自动生成项目所有的class文件,

然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下,

然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下,

然后将需要加密的class文件拷贝出去,例如拷贝到e:/test下


加密代码

1.加密代码

以一个blog项目为例,项目结构:

2.png

这里选择加密com.uikoo9.fore.controller包,

所以需要修改之前提到的配置文件中:

encrypted_package=com.uikoo9.fore.controller

运行QEncryptFrame.java文件,如下:

3.png

其中e:/test下为要加密的包,如下:

4.png

点击加密按钮,会提示加密成功。


2.复制代码

将加密成功的class代码复制到tomcat部署项目中,如下

5.png

注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。

注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。

注意覆盖完成后,不要做修改代码,clean等操作,否则加密后的class会被再次覆盖。


自定义ClassLoader

1.修改配置文件

将配置文件进行对应的修改,加密包修改为对应的包,class路径修改为tomcat中项目路径,

encrypted_package=com.uikoo9.fore.controller
encrypted_class_path=Z\:/workspaces/jfinalq_01_blog/WebRoot/WEB-INF/classes/


2.打包

将jfinalQ-encrypt中的loader包和QClassUtil打包为一个jar,如下:

9.png

注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,

注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,

注意,只需要打包com.uikoo9.loader下的文件和QClassUtil,配置文件也要打包进去,


3.定义tomcat的loader

修改tomcat/conf/context.xml文件,添加如下代码:

<Loader loaderClass="com.uikoo9.loader.QClassLoader" delegate="true"></Loader>

添加完后,如下:

7.png


4.关于loader的jar命名

上面的Loader将tomcat的loader指向了com.uikoo9.loader.QClassLoader,

其实就是tomcat去tomcat/lib文件夹下去找这个类,

所以这个jar的命名是无关,这里将jar命名为了类似tomcat自带jar,tomcat-i18n-ia.jar,如下:

8.png


访问和校验

1.访问

启动tomcat,访问项目,发现可以正常访问,如下:

10.png


2.校验

用Java Decompiler对com.uikoo9.fore.controller下的class进行反编译,发现:

12.png

也就是没办法反编译了。


end

至此,对tomcat下非spring项目的加密部署实现。

至此,对tomcat下非spring项目的加密部署实现。

至此,对tomcat下非spring项目的加密部署实现。


jfinalQ2.0

官网:http://uikoo9.com/jfinalQ

源码:https://github.com/uikoo9/jfinalQ


更多精彩内容:http://uikoo9.com/


求打赏(长按图片即可识别)~
微信 捐助列表:http://uikoo9.com/donate/

猜你喜欢

转载自blog.csdn.net/uikoo9/article/details/49022221
03-