概述
#jdbc.properties
master.db.user=FmtMf6LBoaQ=
master.db.password=FmtMf6LBoaQ=
#applicationContext.xml
<bean id="propertyConfigurer" class="com.neusoft.tsdcms.core.web.EncryptablePropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<!-- other resource -->
<value>classpath:fileInterface.properties</value>
<value>classpath:fileResources.properties</value>
</list>
</property>
</bean>
#解密properties文件类EncryptablePropertyPlaceholderConfigurer.java
public class EncryptablePropertyPlaceholderConfigurer extends
PropertyPlaceholderConfigurer {
private static final String KEY = "NEUSOFTTSD";
private static final String MASTER_DB_USER = "master.db.user";
private static final String MASTER_DB_PASSWORD = "master.db.password";
private static final String SLAVE_DB_USER = "slave.db.user";
private static final String SLAVE_DB_PASSWORD = "slave.db.password";
protected void processProperties(
ConfigurableListableBeanFactory beanFactory, Properties props)
throws BeansException {
try {
String m_user = props.getProperty(MASTER_DB_USER);
String m_pwd = props.getProperty(MASTER_DB_PASSWORD);
String s_user = props.getProperty(SLAVE_DB_USER);
String s_pwd = props.getProperty(SLAVE_DB_PASSWORD);
if (m_user != null) {
props.setProperty(MASTER_DB_USER, DESUtil.decrypt(m_user, KEY));
}
if (m_pwd != null) {
props.setProperty(MASTER_DB_PASSWORD, DESUtil.decrypt(m_pwd, KEY));
}
if(s_user != null){
props.setProperty(SLAVE_DB_USER, DESUtil.decrypt(s_user, KEY));
}
if(s_pwd != null){
props.setProperty(SLAVE_DB_PASSWORD, DESUtil.decrypt(s_pwd, KEY));
}
super.processProperties(beanFactory, props);
} catch (Exception e) {
e.printStackTrace();
}
}
}
#加密类DESUtil.java
public class DESUtil {
private final static String DES = "DES";
public final static String DES_KEY = "NEUSOFTTSD";
public static void main(String[] args) throws Exception {
String data = "root";
System.err.println(encrypt(data, DES_KEY));
System.err.println(decrypt(encrypt(data, DES_KEY), DES_KEY));
}
/**
* Description 根据键值进行加密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) throws Exception {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
String strs = new BASE64Encoder().encode(bt);
return strs;
}
/**
* Description 根据键值进行解密
* @param data
* @param key 加密键byte数组
* @return
* @throws IOException
* @throws Exception
*/
public static String decrypt(String data, String key) throws IOException,
Exception {
if (data == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] buf = decoder.decodeBuffer(data);
byte[] bt = decrypt(buf,key.getBytes());
return new String(bt);
}
/**
* Description 根据键值进行加密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
/**
* Description 根据键值进行解密
* @param data
* @param key 加密键byte数组
* @return
* @throws Exception
*/
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance(DES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
}
最后
以上就是落寞月光为你收集整理的Jdbc配置文件密码密文传输的全部内容,希望文章能够帮你解决Jdbc配置文件密码密文传输所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复