posts - 33, comments - 46, trackbacks - 0, articles - 2
通常在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环境下面才能调用,有兴趣的朋友可以自行测试看看。
 1import weblogic.security.internal.*;
 2import weblogic.security.internal.encryption.EncryptionService;
 3import weblogic.utils.encoders.BASE64Decoder;
 4import weblogic.utils.encoders.BASE64Encoder;
 5public 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 java
你好 我是一个初学的,上述的程序怎么在window下运行, 我已将安装weblogic9.2
谢谢

只有注册用户登录后才能发表评论。


网站导航: