数据库配置文件加密

 数据库加密,查了好多资料,开始都没有解决,朋友spring mvc 都可以使用,但是我这么项目还是没有做出来;最后还是我旁边的波波大神做出来了。

方法一  springmvc通过的,其他的自己测:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  
  2.     <property name="basename" value="messages" />  
  3.     <property name="useCodeAsDefaultMessage" value="true" />  
  4. </bean>  
  5.   
  6. <bean class="com.ott.Utils.ConvertPwdPropertyConfigurer"    
  7.    p:location="classpath:jdbc.properties"    
  8.    p:fileEncoding="utf-8"    
  9.    />    
  10.        
  11. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    
  12.    destroy-method="close"     
  13.    p:driverClassName="${driverClassName}"    
  14.    p:url="${url}"     
  15.    p:username="${username}"    
  16.    p:password="${password}" />   

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;  
  2.   
  3. public class ConvertPwdPropertyConfigurer extends PropertyPlaceholderConfigurer{    
  4.      private String[] encryptPropNames = {"driverClassName","url","username""password"};    
  5.        
  6.         @Override    
  7.         protected String convertProperty(String propertyName, String propertyValue)    
  8.         {    
  9.                 
  10.             //如果在加密属性名单中发现该属性    
  11.             if (isEncryptProp(propertyName))    
  12.             {    
  13.                 String decryptValue = DESUtil.getDecryptString(propertyValue);    
  14.                 System.out.println(decryptValue);    
  15.                 return decryptValue;    
  16.             }else {    
  17.                 return propertyValue;    
  18.             }    
  19.                 
  20.         }    
  21.             
  22.         private boolean isEncryptProp(String propertyName)    
  23.         {    
  24.             for (String encryptName : encryptPropNames)    
  25.             {    
  26.                 if (encryptName.equals(propertyName))    
  27.                 {    
  28.                     return true;    
  29.                 }    
  30.             }    
  31.             return false;    
  32.         }    
  33. }    

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.security.Key;  
  2. import java.security.SecureRandom;  
  3.   
  4. import javax.crypto.Cipher;  
  5. import javax.crypto.KeyGenerator;  
  6.   
  7. import sun.misc.BASE64Decoder;  
  8. import sun.misc.BASE64Encoder;  
  9.   
  10. public class DESUtil {    
  11.     private static Key key;    
  12.     private static String KEY_STR="mykey";    
  13.         
  14.     static{    
  15.         try    
  16.         {    
  17.             KeyGenerator generator = KeyGenerator.getInstance("DES");    
  18.             SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");    
  19.             secureRandom.setSeed(KEY_STR.getBytes());    
  20.             generator.init(secureRandom);    
  21.             key = generator.generateKey();    
  22.             generator=null;    
  23.         }    
  24.         catch (Exception e)    
  25.         {    
  26.             throw new RuntimeException(e);    
  27.         }    
  28.     }    
  29.         
  30.     /**  
  31.      * 对字符串进行加密,返回BASE64的加密字符串  
  32.      * <功能详细描述>  
  33.      * @param str  
  34.      * @return  
  35.      * @see [类、类#方法、类#成员]  
  36.      */    
  37.     public static String getEncryptString(String str){    
  38.         BASE64Encoder base64Encoder = new BASE64Encoder();    
  39.         System.out.println(key);    
  40.         try    
  41.         {    
  42.             byte[] strBytes = str.getBytes("UTF-8");    
  43.             Cipher cipher = Cipher.getInstance("DES");    
  44.             cipher.init(Cipher.ENCRYPT_MODE, key);    
  45.             byte[] encryptStrBytes = cipher.doFinal(strBytes);    
  46.             return base64Encoder.encode(encryptStrBytes);    
  47.         }    
  48.         catch (Exception e)    
  49.         {    
  50.             throw new RuntimeException(e);    
  51.         }    
  52.             
  53.     }    
  54.         
  55.     /**  
  56.      * 对BASE64加密字符串进行解密  
  57.      * <功能详细描述>  
  58.      * @param str  
  59.      * @return  
  60.      * @see [类、类#方法、类#成员]  
  61.      */    
  62.     public static String getDecryptString(String str){    
  63.         BASE64Decoder base64Decoder = new BASE64Decoder();    
  64.         try    
  65.         {    
  66.             byte[] strBytes = base64Decoder.decodeBuffer(str);    
  67.             Cipher cipher = Cipher.getInstance("DES");    
  68.             cipher.init(Cipher.DECRYPT_MODE, key);    
  69.             byte[] encryptStrBytes = cipher.doFinal(strBytes);    
  70.             return new String(encryptStrBytes,"UTF-8");    
  71.         }    
  72.         catch (Exception e)    
  73.         {    
  74.             throw new RuntimeException(e);    
  75.         }    
  76.             
  77.     }    




方法二:spring项目通过的


[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 定义受环境影响易变的变量 -->  
  2.     <bean  
  3.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  4.         <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />  
  5.         <property name="ignoreResourceNotFound" value="true" />  
  6.         <property name="locations">  
  7.             <list>  
  8.                 <!-- 标准配置 -->  
  9.                 <value>classpath*:/application.properties</value>  
  10.                 <!-- 集群中节点配置 -->  
  11.                 <value>classpath*:/application.cluster.properties</value>  
  12.                 <!-- 本地开发环境配置 -->  
  13.                 <value>classpath*:/application.local.properties</value>  
  14.                 <!-- 服务器生产环境配置 -->  
  15.                 <value>classpath*:/application.server.properties</value>  
  16.             </list>  
  17.         </property>  
  18.     </bean>  
  19.       
  20.     <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->  
  21.     <context:component-scan base-package="net.hehang" />  
  22.   
  23.       
  24.     <!-- 数据源配置,使用应用内的DBCP数据库连接池 -->  
  25.     <bean id="dataSource" class="net.hehang.service.utlile.Test"  
  26.         destroy-method="close">  
  27.         <!-- Connection Info -->  
  28.         <property name="driverClassName" value="${jdbc.driver}" />  
  29.         <property name="url" value="${jdbc.url}" />  
  30.         <property name="username" value="${jdbc.username}" />  
  31.         <property name="password" value="${jdbc.password}" />  
  32.           
  33.         <!-- Connection Pooling Info -->  
  34.         <property name="initialSize" value="5" />  
  35.         <property name="maxActive" value="100" />  
  36.         <property name="maxIdle" value="30" />  
  37.         <property name="maxWait" value="500" />  
  38.         <property name="poolPreparedStatements" value="false" />  
  39.         <property name="defaultAutoCommit" value="false" />  
  40.     </bean>  
  41.       


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. import java.lang.reflect.Method;  
  2.   
  3.   
  4. public class Test extends org.apache.commons.dbcp.BasicDataSource{  
  5.   
  6.     public static void main(String[] args) {  
  7.            /** 
  8.             * 遍历父类方法 
  9.             */  
  10.            for(Method method:new Test().getClass().getMethods())  
  11.            {  
  12.                System.out.println(method);  
  13.            }  
  14.   
  15.        }  
  16.        /** 
  17.         * 重写父类 setPassword() 
  18.         */  
  19.     @Override  
  20.        public synchronized void setPassword(String password) {  
  21.              
  22.            String dePassword=DESUtil.getDecryptString(password);//将密文password解密成明文password  
  23.              
  24.            super.setPassword(dePassword);//解密之后调用父类的setPassword();因为父类放中调用了一个私有变量,重写的方法不能完全代替父类方法  
  25.        }  
  26.        /** 
  27.         * 重写父类 setUrl() 
  28.         */  
  29.     @Override  
  30.        public synchronized void setUrl(String url)  
  31.        {  
  32.              
  33.            String deUrl=DESUtil.getDecryptString(url);//将密文Url解密成明文Url  
  34.            super.setUrl(deUrl);  
  35.        }  
  36.        /** 
  37.         * 重写父类 setUsername() 
  38.         */  
  39.     @Override  
  40.        public synchronized void setUsername(String username)  
  41.        {  
  42.            String deUsername=DESUtil.getDecryptString(username);//将密文Username解密成明文Username  
  43.            super.setUsername(deUsername);  
  44.        }  
  45.   
  46. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值