公司根據某個客戶開發了一套相對專用的web系統,後來就議論到系統如何防止拷貝和基礎之上來.在網上找了半天,大部分都在講**混淆,而涉及到如何防止拷貝的地方卻很少.綜合了網上通用的做法,自己再加點東西,就成了乙個比較簡單的防止拷貝方法.
方法只適用於一些簡單的小系統中,在安全性要求比較高的地方,就不適用了.且沒有考慮到**混淆部分,主要防止非技術人員對系統進行非技術方面的操作.(只防普通使用者)
1,資料庫
現在基本上都把使用者名稱和密碼放在配置檔案中,所以將連線資料放在程式裡已不適實際.於是考慮在進行資料連線的**中,將讀出的資料進行另一種運算(解密)而得到實際的資料.如下圖所示:
簡單起見,只對密碼進行了處理.實際密碼為123456,而生成的密碼根據配置檔案中的密碼,即是加密之後的密碼,原密碼為(123456).
配置檔案中的decrypt,即是是否解密的配置,當值為true時,表示為需要解密.而為false時,表示為不解密.
在開發的時候,將decrypt置為false,並以明文密碼開發;而在實際部署時,將密碼進行加密處理之後,覆蓋相應的配置檔案.以達到資料庫連線加密的目的.
參考**如下:
string x = properties.getproperty("decrypt");
if(x != null && x.equals("true"))
2,程式
這裡主要討論的是在系統執行之中,在載入class檔案時對檔案進行解密操作再載入的情況.
由於我們用的是tomcat,故考慮由tomcat的classloader入手,將class的載入根據系統的需要分成兩部分.對於需要進行解密載入的先進行解密(強制解密),而對於不需要的直接進行解析載入.具體方法如下:
將需要進行加密的檔案,以列表形式放在乙個可配置的配置檔案中,如encrypt.properties檔案中.
加密需要被加密的檔案,並部署至使用者系統.
tomcat執行系統,執行載入class二進位制檔案時,讀取配置檔案,對需要解密的檔案在載入時先進行解密操作,再載入檔案.
參考**如下:
encrypt.properties內容:
com.xx.action.a.class
com.xx.service.b.class
進行解析還原資料
if(encryptfilelist.contains(name))
這樣,系統的執行將需要修改的tomcat才能執行,故當使用者只是將系統拷貝之後,因為新的tomcat不能直接解析加密之後的class檔案,而不能啟動執行.達到防止拷貝的目的.
3,機器繫結
主要方法就是讀取機器內部特徵碼(目前主要考慮到mac位址),進行一系列運算,與期望值相比對.如果符合,則表示目的機器是符合要求的,否則丟擲異常,表示不能通過驗證.主要步驟如下:
在進行程式部署的時候,由相關命令生成乙個指定檔案x(檔名為c:/windows/sys.key,與系統檔案相混淆),檔案中包含本機的相關資訊.
源程式進行乙個靜態方法,在程式載入執行的同時,程式開始進行方法驗證.
方法讀取指定的檔案x.
方法從檔案中讀取相應資料.
方法讀取執行機器的mac位址,按照即定演算法生成相應的驗證資訊.
將新驗證資訊與檔案x中的驗證資訊進行比對,如果比對成功,驗證通過.否則不通過.
參考**如下:
讀出mac位址(適用於jdk1.6):
enumerationnetworkinte***ces = networkinte***ce.getnetworkinte***ces();
liststringlist = new arraylist();
while(networkinte***ces.hasmoreelements())
}return stringlist.toarray(new string[stringlist.size()]);
靜態驗證:
public static void vaditate()
throw new exception("ls");
} catch(exception e)
}
對深淺拷貝的一點認識
這學期開了c 課程,上課不認真聽課的我,選擇敲下老師課件中所有 來學習,到建構函式模組認識了有個叫做 拷貝建構函式 的東西,其中深淺拷貝令我感到困惑,在上網查閱了相關資料以及讀過各博主的博文之後,有感想體會如下,以供日後查缺補漏。重所周知的拷貝建構函式 複製建構函式 有三個用途 1 乙個物件作為函式...
關於web效能的一點想法
概念 資料層 前提條件同等硬體,同等頻寬條件。為了提高效能,需要減少io,降低資料庫連線斷開頻率 連線斷開很費資源 減少io 所有常量,或變動不大的量統統常駐記憶體。降低資料庫連線頻率 資料層分離,資料層負責統一協調。常量常駐記憶體指的是,一些常量,在系統啟動時候,從資料庫或者配置方案,一次性載入到...
開發web列印的一點體會
在我們還沒有做列印控制項之前,就聽說過乙個國外的列印控制項,是scriptx,當時也沒有仔細研究,只覺得這名字真怪,說它是專用名詞吧,卻有點含義,說它有點含義吧,卻與web列印搭不上邊。還有乙個國外的列印控制項,叫htmlprint,這兩個控制項吧,實際上用的技術都一樣,都是ie的templepri...