我的其他笔记有记录过加密算法,这里不一一阐述,用DES对MySQL用户名和密码加密,然后在spring-dao.xml中配置中解密,需要新建一个解密类注册到xml中。
解密类:
package com.mlr.util;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {// 需要加密的字段数组private String[] encryptPropNames = { "jdbc.username", "jdbc.password" };/*** 对关键的属性进行转换*/@Overrideprotected 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;// 设置密钥keyprivate 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[]并转换成StringBASE64Encoder 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 exceptionthrow new RuntimeException(e);}}/*** 获取解密之后的信息* * @param str* @return*/public static String getDecryptString(String str) {// 基于BASE64编码,接收byte[]并转换成StringBASE64Decoder 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 exceptionthrow 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>
最近在整理一些资源工具,放在网站分享 http://tools.maqway.com
欢迎关注公众号:麻雀唯伊 , 不定时更新资源文章,生活优惠,或许有你想看的


















