数据库账号密码加密

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

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对象的属性 ,不会更改配置文件的值。

数据库账号密码加密

上一篇:2020/06/16 mysql 库的增删改查 表的增删改查


下一篇:如何减少HTTP请求数;Cookie;