zoukankan      html  css  js  c++  java
  • 数据库账号密码加密

    简单的加密,就是把连接数据的账号密码在配置文件中使用密文,在连接数据库的时候解密。

    1.加密工具类

    public class DESUtil
    {  
        private static Key key;  
        private static String KEY_STR="tian";  
          
        static{  
            try  
            {  
                KeyGenerator generator = KeyGenerator.getInstance("DES");  
                SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");  
                secureRandom.setSeed(KEY_STR.getBytes());
                generator.init(secureRandom);  
                key = generator.generateKey();  
                generator=null;  
            }  
            catch (Exception e)  
            {  
                throw new RuntimeException(e);  
            }  
        }  
          
        /** 
         * 对字符串进行加密,返回BASE64的加密字符串 
         * <功能详细描述> 
         * @param str 
         * @return 
         * @see [类、类#方法、类#成员] 
         */  
        
        public static String getEncryptString(String str){  
            BASE64Encoder base64Encoder = new BASE64Encoder();  
            try  
            {  
                byte[] strBytes = str.getBytes("UTF-8");  
                Cipher cipher = Cipher.getInstance("DES");  
                cipher.init(Cipher.ENCRYPT_MODE, key);  
                byte[] encryptStrBytes = cipher.doFinal(strBytes);  
                return base64Encoder.encode(encryptStrBytes);  
            }  
            catch (Exception e)  
            {  
                throw new RuntimeException(e);  
            }  
              
        }  
          
        /** 
         * 对BASE64加密字符串进行解密 
         * <功能详细描述> 
         * @param str 
         * @return 
         * @see [类、类#方法、类#成员] 
         */  
        public static String getDecryptString(String str){  
            BASE64Decoder base64Decoder = new BASE64Decoder();  
            try  
            {  
                byte[] strBytes = base64Decoder.decodeBuffer(str);  
                Cipher cipher = Cipher.getInstance("DES");  
                cipher.init(Cipher.DECRYPT_MODE, key);  
                byte[] encryptStrBytes = cipher.doFinal(strBytes);  
                return new String(encryptStrBytes,"UTF-8");  
            }  
            catch (Exception e)  
            {  
                throw new RuntimeException(e);  
            }  
              
        }  

    通过上边的工具类对连接数据库的账号密码进行加密。该数据库的账号和密码分别是 “postgres” 和 “postgres”。

    经过加密后得到 “P4jPscryZFIx/IjAWZ6/Dw==” 和 “P4jPscryZFIx/IjAWZ6/Dw==”

    2.配置文件属性加密

    通过 DES 算法加密连接数据库的账号和密码并将加密后的密文写到 db 配置文件中。

    jdbc.properties  配置文件完整内容如下:

    jdbc.driver=org.postgresql.Driver
    jdbc.url=jdbc:postgresql://10.10.46.104:5432/postgres
    jdbc.username=P4jPscryZFIx/IjAWZ6/Dw==
    jdbc.password=P4jPscryZFIx/IjAWZ6/Dw==

    jdbc.username :加密后的值

    jdbc.password :加密后的值

    3、加密生成方法

    public static void main(String[] args)  
        {  
            String name ="postgres";  
            String password="postgres";  
            String encryname = getEncryptString(name);  
            String encrypassword = getEncryptString(password);  
            System.out.println(encryname);  
            System.out.println(encrypassword);  
        }

    用以上的方法可以得到加密后的秘钥。

    4、初始化解密

    private static Properties ppt = null;
    
        static {
            try {
                ppt = Resources.getResourceAsProperties("jdbc.properties");
            } catch (IOException e) {
                e.printStackTrace();
            }
            //获取配置文件的属性值
            String username = ppt.getProperty("jdbc.username");
            String password = ppt.getProperty("jdbc.password");
            //把解密的username存放至Properties对象中
            ppt.setProperty("jdbc.username", DESUtil.getDecryptString(username));
            //把解密的password存放至Properties对象中
            ppt.setProperty("jdbc.password", DESUtil.getDecryptString(password));
        }

    使用Properties实现解密,对象存在内存中,更改Properties对象的属性 ,不会更改配置文件的值。

  • 相关阅读:
    Android--多线程之Handler
    Android--Service之基础
    Android--UI之Fragment
    Android--多线程之图文混排
    python常用模块
    python应用之socket编程
    网络编程socket理论一
    pycharm Launching unittests with arguments
    python字符串格式化
    python数据类型之三
  • 原文地址:https://www.cnblogs.com/fishperson/p/13141100.html
Copyright © 2011-2022 走看看