加密连接数据库明文密码
2017-11-11 18:51
288 查看
我的其他笔记有记录过加密算法,这里不一一阐述,用DES对MySQL用户名和密码加密,然后在spring-dao.xml中配置中解密,需要新建一个解密类注册到xml中。
解密类:
加密类:
用加密类对账户和密码进行加密后,jdbc.properties中配置如下
然后spring-dao.xml中改变配置:
解密类:
package com.mlr.util; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { // 需要加密的字段数组 private String[] encryptPropNames = { "jdbc.username", "jdbc.password" }; /** * 对关键的属性进行转换 */ @Override protected String convertProperty(String propertyName, String propertyValue) { if (isEncryptProp(propertyName)) { // 对已加密的字段进行解密工作 String decryptValue = DESUtil.getDecryptString(propertyValue); return decryptValue; } else { return propertyValue; } } /** * 该属性是否已加密 * * @param propertyName * @return */ private boolean isEncryptProp(String propertyName) { // 若等于需要加密的field,则进行加密 for (String encryptpropertyName : encryptPropNames) { if (encryptpropertyName.equals(propertyName)) return true; } return false; } }
加密类:
package com.mlr.util; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。 * * @author xiangze * */ public class DESUtil { private static Key key; // 设置密钥key private static String KEY_STR = "myKey"; private static String CHARSETNAME = "UTF-8"; private static String ALGORITHM = "DES"; static { try { // 生成DES算法对象 KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM); // 运用SHA1安全策略 SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); // 设置上密钥种子 secureRandom.setSeed(KEY_STR.getBytes()); // 初始化基于SHA1的算法对象 generator.init(secureRandom); // 生成密钥对象 key = generator.generateKey(); generator = null; } catch (Exception e) { throw new RuntimeException(e); } } /** * 获取加密后的信息 * * @param str * @return */ public static String getEncryptString(String str) { // 基于BASE64编码,接收byte[]并转换成String BASE64Encoder base64encoder = new BASE64Encoder(); try { // 按UTF8编码 byte[] bytes = str.getBytes(CHARSETNAME); // 获取加密对象 Cipher cipher = Cipher.getInstance(ALGORITHM); // 初始化密码信息 cipher.init(Cipher.ENCRYPT_MODE, key); // 加密 byte[] doFinal = cipher.doFinal(bytes); // byte[]to encode好的String并返回 return base64encoder.encode(doFinal); } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); } } /** * 获取解密之后的信息 * * @param str * @return */ public static String getDecryptString(String str) { // 基于BASE64编码,接收byte[]并转换成String BASE64Decoder base64decoder = new BASE64Decoder(); try { // 将字符串decode成byte[] byte[] bytes = base64decoder.decodeBuffer(str); // 获取解密对象 Cipher cipher = Cipher.getInstance(ALGORITHM); // 初始化解密信息 cipher.init(Cipher.DECRYPT_MODE, key); // 解密 byte[] doFinal = cipher.doFinal(bytes); // 返回解密之后的信息 return new String(doFinal, CHARSETNAME); } catch (Exception e) { // TODO: handle exception throw new RuntimeException(e); } } public static void main(String[] args) { System.out.println(getEncryptString("123456")); } }
用加密类对账户和密码进行加密后,jdbc.properties中配置如下
jdbc.username=WnplV/ietfQ= jdbc.password=QAHlVoUc49w=
然后spring-dao.xml中改变配置:
<!-- 1.配置数据库相关参数properties的属性:${url} --> <!--<context:property-placeholder location="classpath:jdbc.properties"/>--> <bean class="com.mlr.util.EncryptPropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> <property name="fileEncoding" value="UTF-8" /> </bean>
相关文章推荐
- JBoss下数据库连接的密码加密
- Druid实现数据库连接用户密码加密
- PB数据库连接描述文件的密码加密和解密原理
- druid对数据库连接密码加密和解密
- Web项目中对配置文件中的密码进行加密(数据库连接密码)
- 将jdbc连接明文密码加密方案
- PB数据库连接描述文件的密码加密和解密原理
- AES-128加密数据库连接的用户名和密码
- kettle 数据库连接密码的加密
- 使用druid 数据池对数据库连接密码加密
- JNDI连接数据库加密用户名密码
- Druid实现数据库连接用户密码加密
- 修改所要连接的数据库及生成加密的用户名与密码
- 如何实现数据库连接的密码加密
- Druid实现数据库连接用户密码加密
- Druid实现数据库连接用户密码加密
- Spring+mysql+druid对数据库连接的用户名密码加密
- .Net使用DES加密,.Net和java分别解密,并正则匹配替换加密密码为明文
- springMVC web项目 数据库用户名密码加密解密
- 一直下一步安装sqlserver2008R2(只增加一个密码)后程序无法连接数据库问题