c3p0数据源用户名密码加密

一、cn.com.encrypt.java

package cn.com.encrypt;

import java.io.ByteArrayOutputStream;
import java.util.Properties;

import javax.crypto.Cipher;

import org.springframework.beans.factory.FactoryBean;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DBEncrypt implements FactoryBean {

	private Properties properties;

	public Object getObject() throws Exception {
		return getProperties();
	}

	public Class getObjectType() {
		return java.util.Properties.class;
	}

	public boolean isSingleton() {
		return true;
	}

	public Properties getProperties() {
		return properties;
	}

	public void setProperties(Properties inProperties) {
		this.properties = inProperties;
		String originalUsername = properties.getProperty("user");
		String originalPassword = properties.getProperty("password");
		if (originalUsername != null) {
			String newUsername = deEncryptUsername(originalUsername);
			properties.put("user", newUsername);
		}
		if (originalPassword != null) {
			String newPassword = deEncryptPassword(originalPassword);
			properties.put("password", newPassword);
		}
	}

	private String deEncryptUsername(String originalUsername) {
		return dCode(originalUsername.getBytes());
	}

	private String deEncryptPassword(String originalPassword) {
		return dCode(originalPassword.getBytes());
	}

	public String eCode(String needEncrypt) {
		byte result[] = null;
		try {
			Cipher enCipher = Cipher.getInstance("DES");
			javax.crypto.SecretKey key = Key.loadKey();
			enCipher.init(1, key);
			result = enCipher.doFinal(needEncrypt.getBytes());
			BASE64Encoder b = new BASE64Encoder();
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			b.encode(result, bos);
			result = bos.toByteArray();
		} catch (Exception e) {
			throw new IllegalStateException(
					"System doesn't support DES algorithm.");
		}
		return new String(result);
	}

	public String dCode(byte result[]) {
		String s = null;
		try {
			Cipher deCipher = Cipher.getInstance("DES");
			deCipher.init(2, Key.loadKey());
			BASE64Decoder d = new BASE64Decoder();
			result = d.decodeBuffer(new String(result));
			byte strByte[] = deCipher.doFinal(result);
			s = new String(strByte);
		} catch (Exception e) {
			throw new IllegalStateException(
					"System doesn't support DES algorithm.");
		}
		return s;
	}

	public static void main(String[] args) {
		String s = "test";
		DBEncrypt p = new DBEncrypt();
		String afterE = p.eCode(s);
		System.out.println("after:"+afterE);//这里是加密后的字符
		System.out.println("before:"+p.dCode(afterE.getBytes()));
	}
}
 

 

二、cn.com.encrypt.Key.java

package cn.com.encrypt;

import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import sun.misc.BASE64Decoder;

public class Key {
	private static String encryptKey = "7EV/Zzutjzg=";

	public Key() {
	}

	public static SecretKey loadKey() throws Exception {
		BASE64Decoder d = new BASE64Decoder();
		byte b[] = d.decodeBuffer(encryptKey);
		DESKeySpec dks = new DESKeySpec(b);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		return keyFactory.generateSecret(dks);
	}
}
 

 

三、cn.com.encrypt.PropertiesEncryptFactoryBean.java

package cn.com.encrypt;

import java.util.Properties;

import org.springframework.beans.factory.FactoryBean;

public class PropertiesEncryptFactoryBean implements FactoryBean {

	private Properties properties;

	public Object getObject() throws Exception {
		return getProperties();
	}

	public Class getObjectType() {
		return java.util.Properties.class;
	}

	public boolean isSingleton() {
		return true;
	}

	public Properties getProperties() {
		return properties;
	}

	public void setProperties(Properties inProperties) {
		this.properties = inProperties;
		String originalUsername = properties.getProperty("user");
		String originalPassword = properties.getProperty("password");
		if (originalUsername != null) {
			String newUsername = deEncryptUsername(originalUsername);
			properties.put("user", newUsername);
		}
		if (originalPassword != null) {
			String newPassword = deEncryptPassword(originalPassword);
			properties.put("password", newPassword);
		}
	}

	private String deEncryptUsername(String originalUsername) {
		return deEncryptString(originalUsername);
	}

	private String deEncryptPassword(String originalPassword) {
		return deEncryptString(originalPassword);
	}

	private String deEncryptString(String originalString) {
		return new DBEncrypt().dCode(originalString.getBytes());
	}

}
 

 

 

四、config.properties

CHECK_ST_ORL_URL=jdbc:oracle:thin:@127.0.0.1:1521:rac
CHECK_ST_ORL_USER=qBEWE7vGhBs=
CHECK_ST_ORL_PASSWD=qBEWE7vGhBs=
CHECK_ST_ORL_driverClassName=oracle.jdbc.driver.OracleDriver

 

五、applicationContext.xml

<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>/WEB-INF/classes/config.properties</value>
			</list>
		</property>
	</bean>
<bean id="dataSourceOracle"
		class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="automaticTestTable" value="CONNECTION_TEST" />
		<property name="testConnectionOnCheckout" value="true" />
		<property name="acquireRetryAttempts" value="5" />
		<property name="driverClass">
			<value>${CHECK_ST_ORL_driverClassName}</value>
		</property>
		<property name="jdbcUrl">
			<value>${CHECK_ST_ORL_URL}</value>
		</property>
		<property name="properties" ref="dataSourceProperties"/>
		<property name="minPoolSize">
			<value>30</value>
		</property>
		<property name="maxPoolSize">
			<value>100</value>
		</property>
		<property name="initialPoolSize">
			<value>30</value>
		</property>
		<property name="maxConnectionAge">
			<value>1800</value>
		</property>
		<property name="maxIdleTime">
			<value>1800</value>
		</property>
		<property name="maxIdleTimeExcessConnections">
			<value>300</value>
		</property>
		<property name="maxStatements">
			<value>0</value>
		</property>
		<property name="testConnectionOnCheckin">
			<value>false</value>
		</property>
		<property name="idleConnectionTestPeriod">
			<value>900</value>
		</property>
		<property name="checkoutTimeout">
			<value>1000</value>
		</property>
	</bean>
	<bean id="dataSourceProperties" class="cn.com.encrypt.PropertiesEncryptFactoryBean">  
        <property name="properties">  
            <props>  
                <prop key="user">${CHECK_ST_ORL_USER}</prop>  
                <prop key="password">${CHECK_ST_ORL_PASSWD}</prop>  
            </props>  
        </property>  
    </bean> 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用C3P0数据源实现用户登录功能的示例代码,我们假设已经将C3P0库导入到项目中,并且已经创建了一个名为"user"的MySQL数据库和一个名为"users"的用户表。 ```python import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.mchange.v2.c3p0.ComboPooledDataSource; public class UserLogin { // C3P0数据源配置 private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); private static final String JDBC_URL = "jdbc:mysql://localhost:3306/user"; private static final String JDBC_USER = "root"; private static final String JDBC_PASSWORD = "password"; private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver"; // 用户登录验证 public static boolean validate(String username, String password) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 获取数据库连接 conn = dataSource.getConnection(); // 查询用户信息 String sql = "SELECT * FROM users WHERE username=? AND password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); rs = pstmt.executeQuery(); // 验证用户信息是否正确 if (rs.next()) { return true; } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } return false; } public static void main(String[] args) { // 初始化C3P0数据源 dataSource.setJdbcUrl(JDBC_URL); dataSource.setUser(JDBC_USER); dataSource.setPassword(JDBC_PASSWORD); dataSource.setDriverClass(DRIVER_CLASS); // 用户登录验证 String username = "test"; String password = "password123"; if (validate(username, password)) { System.out.println("Login success!"); } else { System.out.println("Login failed!"); } } } ``` 在这个示例中,我们使用了C3P0数据源来获取数据库连接,然后使用预编译SQL语句查询用户信息并验证用户信息是否正确。在实际应用中,我们需要使用更复杂的逻辑来保护用户信息和确保安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值