Java 通用DB链接字符串解密方法

Posted 客家族_祖仙教_小凡仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 通用DB链接字符串解密方法相关的知识,希望对你有一定的参考价值。

  这种方式是主要是利用了spring加载顺序,因为在加载c3p0加载之前先对配置文件中的密码进行相应的解密,并且注入到属性password中,这样在创建c3p0连接的时候,用的密码就是明文密码了

/*注意,这里有个先后顺序的问题,<property name="properties"> 必须要在前面 $env是环境变量 开发,测试,生产,灰度*/
<bean id="C3p0DataSource" class="com.zns.tool.C3p0DataSource">  
<property name="properties">  
    <props>  
        <prop key="user" >$$env.boms.jdbc.username</prop>  
        <prop key="password" >$$env.boms.jdbc.password</prop>
        <prop key="jdbcUrl" >$$env.boms.jdbc.url</prop>    
    </props>  
</property>  
</bean>  

<!--组织架构数据源-->
<bean id="bomsDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="driverClass" value="$$env.boms.jdbc.driver"/>

<property name="properties" ref="dataSourceProperties"/> 
<property name="jdbcUrl" value="$$env.boms.jdbc.url"/>
<property name="user" value="$$env.boms.jdbc.username"/>
<property name="password" value="$$env.boms.jdbc.password"/>


<property name="initialSize" value="5"/>
<property name="maxActive" value="50"/>
<property name="maxIdle" value="2"/>
<property name="minIdle" value="1"/>
<property name="defaultAutoCommit" value="true"/>

</bean>

下面是读取属性然后解密再把属性传给链接池  DBCP PROXOLL DURID C3P0等等

package com.zns.tool;
//import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.util.Properties;  
import org.springframework.beans.factory.FactoryBean; 

import com.zns.tool.SecUtil;



public final class C3p0DataSource implements FactoryBean

	private Properties properties;    /*SPRING的属性对象*/
	private SecUtil    SecEncryptObj; /*安全对象里面有加密解密算法*/
    /*对虚类方法的继承实现,照抄*/
    public Object getObject() throws Exception           return getProperties();      
    public Class getObjectType()   return java.util.Properties.class;      
    public boolean isSingleton()         return true;      
    public Properties getProperties()         return properties;      
    
    public void setProperties(Properties inProperties) 
      
    	SecEncryptObj = new SecUtil();
        this.properties = inProperties;  
        String EncryUsername = properties.getProperty("user");  
        String EncryPassword = properties.getProperty("password");
        String EncryJdbcUrl = properties.getProperty("JdbcUrl");
        if (EncryUsername != null)
          
        	try 
        	String DecryUsername = SecEncryptObj.decrypt(EncryUsername);  
            properties.put("user", DecryUsername);
        	 catch (Exception e) 	e.printStackTrace();  
        
        
        if (EncryPassword != null)
                      
			try 
				String DecryPassword  = SecEncryptObj.decrypt(EncryPassword);
				properties.put("password", DecryPassword);  
			 catch (Exception e) 	e.printStackTrace();    
        
        
        if (EncryJdbcUrl != null)
          
        	try 
        	String DecryJdbcUrl = SecEncryptObj.decrypt(EncryJdbcUrl);  
            properties.put("JdbcUrl", DecryJdbcUrl);
        	 catch (Exception e) 	e.printStackTrace();  
        
                
      
        

关于加密和解密算法 就好多实现的方法了,自然那种单向加密就算了,毕竟解密需要好长时间.

这里给出前同事 康师傅写的加密和解密方法

这个不好,想看去我公众号查看

以上是关于Java 通用DB链接字符串解密方法的主要内容,如果未能解决你的问题,请参考以下文章

Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)

java加密用PHP解密

查询 DB 并以 Json 格式返回结果的通用 Java 方法

php与java通用AES加密解密算法

Nodejs与Java通用AES加解密

安卓IOS端AEC密钥加密 Java端密钥解密通用实现(16进制表现形式)