WebLogic配置文件Config.xml中的{3DES}加密字符串的解密思路

通常在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 #

你可能感兴趣的:(WebLogic配置文件Config.xml中的{3DES}加密字符串的解密思路)