数据库连接加密密码

时间:2016-06-22 12:16:42

标签: java database spring password-encryption

为了在spring 3中建立数据库连接,我使用已定义bean的xml

<bean id="griffDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close" p:driverClass="${DRIVER_CLASS}" p:jdbcUrl="${DB_URL}"
p:minPoolSize="${MIN_DB_POOL_SIZE}" p:maxPoolSize="${DB_POOL_SIZE}"
p:maxStatements="${DB_POOL_SIZE}"p:idleConnectionTestPeriod="${IDLE_CONNECTION_TEST_PERIOD}"p:loginTimeout="${LOGIN_TIMEOUT}" scope="singleton"></bean>

这里从属性文件

中读取DB_URL值
DB_URL:jdbc:mysql://localhost:3306/databaseautoReconnect=true&user=root&password= [B@42e21073

url中的此密码使用AES加密。 要求是我应该编写一个代码,当春天去连接数据库时,它应该自己解密密码并建立连接。  我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

我使用过BASE64Encoder&amp; BASE64Decoder。稍后您将修改我的代码以使用安全/更好的加密/解密算法。

您首先使用以下代码编码数据库密码:

private String encode(String str) {
        BASE64Encoder encoder = new BASE64Encoder();
        str = new String(encoder.encodeBuffer(str.getBytes()));
        return str;
    }

现在您使用org.apache.commons.dbcp.BasicDataSource的包装类并覆盖setPassword()方法:

import java.io.IOException;
import org.apache.commons.dbcp.BasicDataSource;
import sun.misc.BASE64Decoder;

public class MyCustomBasicDataSource extends BasicDataSource{



    public synchronized void setPassword(String encodedPassword){
        this.password = decode(encodedPassword);
    }

    private String decode(String password) {
        BASE64Decoder decoder = new BASE64Decoder();
        String decodedPassword = null;
        try {
            decodedPassword = new String(decoder.decodeBuffer(password));
        } catch (IOException e) {
            e.printStackTrace();
        }       
        return decodedPassword;
    }
}

这种方式您可以解码(BASE64Decoder)编码密码。