|
Posted on 2006-09-07 12:35 在路上... 閱讀(8531) 評論(1) 編輯 收藏 所屬分類: JAVA相關
通常在weblogic的config.xml文件中,對于關鍵字符串、密碼會自動加密,例如LDAP密碼、數據庫JDBC連接池連接密碼等。通常加密之后前面會加上{3DES}的標識。 3DES就是DES算法的增強,相關資料如下: 1、DES(Data Encryption Standard)是一種經典的對稱算法。其數據分組長度為64位,使用的密鑰為64位,有效密鑰長度為56位(有8位用于奇偶校驗)。它由IBM公司在70年代開發,經過政府的加密標準篩選后,于1976年11月被美國政府采用,隨后被美國國家標準局和美國國家標準協會(American National Standard Institute, ANSI) 承認。
該技術算法公開,在各行業有著廣泛的應用。DES算法從公布到現在已有20多年的歷史,由于計算機能力的飛速發展,DES的56位密鑰長度顯得有些太短了,已經有可能通過窮舉的
方法來對其進行攻擊。但是除此以外,直到現在還沒有發現窮舉以外的能有效破譯DES的方法。 2、DES算法現在已經不能提供足夠的安全性,因為其有效密鑰只有56位。因此,后來又提出了三重DES(或稱3DES),該方法的強度大約和112比特的密鑰強度相當。 這種方法用兩個密鑰對明文進行三次運算。設兩個密鑰是K1和K2,其算法的步驟如圖3所示: 1. 用密鑰K1進行DES加密。 2. 用K2對步驟1的結果進行DES解密。 3. 用步驟2的結果使用密鑰K1進行DES加密。
首先需要找到加密的密鑰,根據BEA文檔可以發現是文件SerializedSystemIni.dat,查找一下安裝目錄就可以找到整個問見,通常系統管理員應該將該文件設置為不能直接訪問,以提高安全性。 加密、解密的大致演示算法代碼如下,在WebLogic 9.2下面調試通過,運行編譯前應該先運行setExamplesEnv.cmd(參考)的環境變量,以保證相關類庫已經被引用了。對于低版本的WebLogic,例如WebLogic 7.0/8.1可能不能直接在命令行執行,因為SerializedSystemIni必須在控制臺Console環境下面才能調用,有興趣的朋友可以自行測試看看。
?1 import?weblogic.security.internal.*; ?2 import?weblogic.security.internal.encryption.EncryptionService; ?3 import?weblogic.utils.encoders.BASE64Decoder; ?4 import?weblogic.utils.encoders.BASE64Encoder; ?5 public?class?CrackData? ?6  { ?7 ????public?static?void?main(String[]?args)? ?8 ???? { ?9 ????????byte[]?salt,keys; 10 ????????salt=SerializedSystemIni.getSalt(); 11 ????????keys=SerializedSystemIni.getEncryptedSecretKey(); 12 ????????String?data=""; 13 ????????for(int?i=0;i<salt.length;i++) { 14 ????????????data+=salt[i]+","; 15 ????????} 16 ????????System.out.println("salt:"+data); 17 ????????data=""; 18 ????????for(int?i=0;i<keys.length;i++) { 19 ????????????data+=keys[i]+","; 20 ????????} 21 ????????System.out.println("Key:"+data); 22 ????????//EncryptionService?svr=SerializedSystemIni.getExistingEncryptionService(); 23 ????????EncryptionService?svr=SerializedSystemIni.getEncryptionService(); 24 ????????System.out.println(svr); 25 ????????System.out.println(svr.getAlgorithm()); 26 ????????if(args.length>1) { 27 ????????????if(args[0].equals("encrypt")) { 28 ????????????????byte[]?edata=svr.encryptString(args[1]); 29 ????????????????String?s?=?(new?BASE64Encoder()).encodeBuffer(edata); 30 ????????????????System.out.println("Encode:"+s); 31 ????????????} 32 ????????????if(args[0].equals("decrypt")) { 33 ????????????????try { 34 ????????????????byte[]?edata?=?(new?BASE64Decoder()).decodeBuffer(args[1]); 35 ????????????????String?txt=svr.decryptString(edata); 36 ????????????????System.out.println("Decode:"+txt); 37 ????????????????}catch(Exception?ex) { 38 ????????????????????ex.printStackTrace(); 39 ????????????????} 40 ????????????} 41 ????????} 42 ???????? 43 ????} 44 } 45 測試運行結果如下:
root@srdsh?#?/rdsh/bea92/jdk150_04/bin/java?CrackData?decrypt?nMttUc5jNe9RNJXslXjbJQ==
-86,123,19,107,
-42,-28,-75,-100,31,0,25,-93,75,115,40,-3,-15,42,-53,41,-25,-13,-6,8,36,85,-81,2
8,66,-110,31,38,-29,-79,-44,-48,
weblogic.security.internal.encryption.JSafeEncryptionServiceImpl@199f91c
3DES
Decode:weblogic
root@srdsh?#?/rdsh/bea92/jdk150_04/bin/java?CrackData?decrypt?erzD515N5z2zSnOk7uG1cYQthCbYA5OU6Bw+Zt5BsjPruTQaOZASh+ZZW4kuBGvfbZ2BXWSACbgOZ2MY4bHtpOPps/6WfZJg
-86,123,19,107,
-42,-28,-75,-100,31,0,25,-93,75,115,40,-3,-15,42,-53,41,-25,-13,-6,8,36,85,-81,2
8,66,-110,31,38,-29,-79,-44,-48,
weblogic.security.internal.encryption.JSafeEncryptionServiceImpl@199f91c
3DES
Decode:0xa778f572127d2282247ec653147c35d4e4040aca016c6d1e06ab325af5798fca
root@srdsh?#
Feedback
# re: WebLogic配置文件Config.xml中的{3DES}加密字符串的解密思路[未登錄] 回復 更多評論
2009-11-24 10:16 by
你好 我是一個初學的,上述的程序怎么在window下運行, 我已將安裝weblogic9.2
謝謝
|