日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hibernate的配置文件中用戶和密碼的加密

 yetao_study 2014-09-27

 hibernate.cfg.xml中,用戶和密碼是明文存放的,存放某些安全問題,想了一個(gè)辦法加密些用戶和密碼的信息。

 

首先創(chuàng)建一個(gè)連接供應(yīng)器,配置文件里的參數(shù)解釋都是此類負(fù)責(zé),所以,只要在此類中進(jìn)行密文解密即可。

  1. public class CustomDriverManagerConnectionProvider extends
  2.         Provider {
  3.     public CustomDriverManagerConnectionProvider() {
  4.         super();
  5.     }
  6.     /*
  7.      * (non-Javadoc)
  8.      * 
  9.      * @see org.hibernate.connection.DriverManagerConnectionProvider#configure(java.util.Properties)
  10.      */
  11.     @Override
  12.     public void configure(Properties props) throws HibernateException {
  13.         String user = props.getProperty(Environment.USER);
  14.         String password = props.getProperty(Environment.PASS);
  15.         props.setProperty(Environment.USER, SecUtil.decrypt(user));
  16.         props.setProperty(Environment.PASS, SecUtil.decrypt(password));
  17.         super.configure(props);
  18.     }
  19. }

 

再寫一個(gè)類,使用AES負(fù)責(zé)字符串的加密與解密

  1. /**
  2.  * AES加密工具
  3.  * 
  4.  * @author Bany
  5.  * 
  6.  * @version 創(chuàng)建時(shí)間:2008-8-5 上午10:58:16
  7.  * 
  8.  */
  9. public class SecUtil {
  10.     private static byte[] keybytes = { 0x31, 0x32, …… };
  11.     public static void main(String[] args) throws Exception {
  12.         String e1 = encrypt("newpassword");
  13.         System.out.println(e1);
  14.         String e2 = decrypt(e1);
  15.         System.out.println(e2);
  16.     }
  17.     /**
  18.      * 加密
  19.      * @param value
  20.      * @return
  21.      */
  22.     public static String encrypt(String value) {
  23.         
  24.         String s=null;
  25.         int mode = Cipher.ENCRYPT_MODE;
  26.         try {
  27.             Cipher cipher = initCipher(mode);
  28.             byte[] outBytes = cipher.doFinal(value.getBytes());
  29.             s = String.valueOf(Hex.encodeHex(outBytes));
  30.         } catch (Exception e) {
  31.             e.printStackTrace();
  32.         }
  33.         return s;
  34.     }
  35.     /**
  36.      * 解密
  37.      * @param value
  38.      * @return
  39.      */
  40.     public static String decrypt(String value) {
  41.         String s = null;
  42.         int mode = Cipher.DECRYPT_MODE;
  43.         try {
  44.             Cipher cipher = initCipher(mode);
  45.             byte[] outBytes = cipher.doFinal(Hex.decodeHex(value.toCharArray()));
  46.             s = new String(outBytes);
  47.         } catch (Exception e) {
  48.             e.printStackTrace();
  49.         }
  50.         return s;
  51.     }
  52.     
  53.     private static Cipher initCipher(int mode) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
  54.         Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  55.         Key key = new SecretKeySpec(keybytes, "AES");
  56.         cipher.init(mode, key);
  57.         return cipher;
  58.     }
  59. }

調(diào)用SecUtil.encrypt的方法,把用戶密碼加密生成密文,然后根據(jù)密文修改hibernate.cfg.xml文件

 

  1. <property name="connection.username">c59cd98</property>
  2. <property name="connection.password">68e32593ea5943a6a</property>
  3. <property name="connection.provider_class">bany.CustomDriverManagerConnectionProvider</property>

第一二行是加密后的密文,第三行是使用自定義的連接器

 

 

PS:如果使用第三方的連接器,CustomDriverManagerConnectionProvider則需要繼承于相應(yīng)的連接器,如C3P0ConnectionProvider

 

 

  hibernate.cfg.xml中,用戶和密碼是明文存放的,存放某些安全問題,想了一個(gè)辦法加密些用戶和密碼的信息。

 

首先創(chuàng)建一個(gè)連接供應(yīng)器,配置文件里的參數(shù)解釋都是此類負(fù)責(zé),所以,只要在此類中進(jìn)行密文解密即可。

  1. public class CustomDriverManagerConnectionProvider extends
  2.         Provider {
  3.     public CustomDriverManagerConnectionProvider() {
  4.         super();
  5.     }
  6.     /*
  7.      * (non-Javadoc)
  8.      * 
  9.      * @see org.hibernate.connection.DriverManagerConnectionProvider#configure(java.util.Properties)
  10.      */
  11.     @Override
  12.     public void configure(Properties props) throws HibernateException {
  13.         String user = props.getProperty(Environment.USER);
  14.         String password = props.getProperty(Environment.PASS);
  15.         props.setProperty(Environment.USER, SecUtil.decrypt(user));
  16.         props.setProperty(Environment.PASS, SecUtil.decrypt(password));
  17.         super.configure(props);
  18.     }
  19. }

 

再寫一個(gè)類,使用AES負(fù)責(zé)字符串的加密與解密

  1. /**
  2.  * AES加密工具
  3.  * 
  4.  * @author Bany
  5.  * 
  6.  * @version 創(chuàng)建時(shí)間:2008-8-5 上午10:58:16
  7.  * 
  8.  */
  9. public class SecUtil {
  10.     private static byte[] keybytes = { 0x31, 0x32, …… };
  11.     public static void main(String[] args) throws Exception {
  12.         String e1 = encrypt("newpassword");
  13.         System.out.println(e1);
  14.         String e2 = decrypt(e1);
  15.         System.out.println(e2);
  16.     }
  17.     /**
  18.      * 加密
  19.      * @param value
  20.      * @return
  21.      */
  22.     public static String encrypt(String value) {
  23.         
  24.         String s=null;
  25.         int mode = Cipher.ENCRYPT_MODE;
  26.         try {
  27.             Cipher cipher = initCipher(mode);
  28.             byte[] outBytes = cipher.doFinal(value.getBytes());
  29.             s = String.valueOf(Hex.encodeHex(outBytes));
  30.         } catch (Exception e) {
  31.             e.printStackTrace();
  32.         }
  33.         return s;
  34.     }
  35.     /**
  36.      * 解密
  37.      * @param value
  38.      * @return
  39.      */
  40.     public static String decrypt(String value) {
  41.         String s = null;
  42.         int mode = Cipher.DECRYPT_MODE;
  43.         try {
  44.             Cipher cipher = initCipher(mode);
  45.             byte[] outBytes = cipher.doFinal(Hex.decodeHex(value.toCharArray()));
  46.             s = new String(outBytes);
  47.         } catch (Exception e) {
  48.             e.printStackTrace();
  49.         }
  50.         return s;
  51.     }
  52.     
  53.     private static Cipher initCipher(int mode) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException{
  54.         Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  55.         Key key = new SecretKeySpec(keybytes, "AES");
  56.         cipher.init(mode, key);
  57.         return cipher;
  58.     }
  59. }

調(diào)用SecUtil.encrypt的方法,把用戶密碼加密生成密文,然后根據(jù)密文修改hibernate.cfg.xml文件

 

  1. <property name="connection.username">c59cd98</property>
  2. <property name="connection.password">68e32593ea5943a6a</property>
  3. <property name="connection.provider_class">bany.CustomDriverManagerConnectionProvider</property>

第一二行是加密后的密文,第三行是使用自定義的連接器

 

 

PS:如果使用第三方的連接器,CustomDriverManagerConnectionProvider則需要繼承于相應(yīng)的連接器,如C3P0ConnectionProvider

 

 

 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多