最近,我遇到了加密db密码的要求,该密码用于使用symmetric key algorithm
为独立调度程序创建连接。
使用java swing utility
加密第一个db密码,我使用aes128
位加密并将其放入属性文件中。
然后在创建连接的connection manager
类中,从属性文件中读取密码并使用相同的密钥解密。在我的最后,我已经在aix服务器上进行了测试,其中此代码正在运行,但在客户端它无法正常工作。它无法解密。在连接管理器类中跟随语句后,它将退出方法,没有任何异常。
pwd=AES128Encryption.decrypt(PAYTFHomeProperties.getProperty("PWD").toString().trim());
我认为这与jce.jar
有关。这是我的解密方法和连接管理器类,我解密密码。
protected Connection getConnection(){
try{
mcName=PAYTFHomeProperties.getProperty("MACHINE_NAME");
sid=PAYTFHomeProperties.getProperty("SID");
port=PAYTFHomeProperties.getProperty("DB_PORT");
UserName=PAYTFHomeProperties.getProperty("USER_NAME");
pwd=AES128Encryption.decrypt(PAYTFHomeProperties.getProperty("PWD").toString().trim());
debug("getEncrptdData||encrypted pwd::"+PAYTFHomeProperties.getProperty("PWD"));
System.out.println("decrypted pwd::"+pwd);
tns=PAYTFHomeProperties.getProperty("TNS");
hostString="jdbc:oracle:thin:@"+mcName+":"+port+":"+sid;
OracleConnectionPoolDataSourcecpds=new OracleConnectionPoolDataSource();
cpds.setDriverType("thin");
cpds.setNetworkProtocol("tcp");
cpds.setServerName(mcName);
cpds.setDatabaseName(sid);
cpds.setPortNumber(Integer.parseInt(port));
cpds.setUser(UserName);
cpds.setPassword(pwd);
pc = (oracle.jdbc.pool.OraclePooledConnection)cpds.getPooledConnection();
connection con= (Connection)pc.getConnection();
} catch(Exception e){
System.out.println("getConnection"+e.toString());
}
return con;
}
这是我的AES128Encryption
类解密方法
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;
public class AES128Encryption {
private static final String ALGO = "AES/ECB/PKCS5Padding";
public static String decrypt(String encryptedData) throws Exception {
Cipher c = Cipher.getInstance(ALGO);
byte[] raw = "************".getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
c.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
}
答案 0 :(得分:0)
这不是一个答案,但试着抓住Throwable:
try {
// do something
} catch (Throwable t) {
t.printStackTrace();
}
然后检查你的班级/方法中是否有没有身体的例外:
try {
// do something
} catch (Exception e) {
// do nothing
}