|  | 
				
					
	
		
			
 			Posted on 2006-09-07 12:35 在路上...  阅读(8638) 评论(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
谢谢
 |