1. 程式人生 > >jfinalQ開發教程03-加密部署

jfinalQ開發教程03-加密部署

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/