Jdbc配置文件密码密文传输

来源:互联网 发布:联通云数据公司 编辑:程序博客网 时间:2024/05/18 02:17

#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);
    }
}


0 0
原创粉丝点击