首页 > 代码库 > java spring中对properties属性文件加密及其解密
java spring中对properties属性文件加密及其解密
原创整理不易,转载请注明出处:java spring中对properties属性文件加密及其解密
代码下载地址:http://www.zuidaima.com/share/1781588957400064.htm
加密类:
package com.zuidaima.commons.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; /** * <ul> * <li>Title:[DESEncryptUtil]</li> * <li>Description: [加密码解密类]</li> * <li>Copyright 2009 RoadWay Co., Ltd.</li> * <li>All right reserved.</li> * <li>Created by [Huyvanpull] [Jul 19, 2010]</li> * <li>Midified by [修改人] [修改时间]</li> * </ul> * * @version 1.0 */ public class DESEncryptUtil { public static void main(String[] args) throws Exception { /** 生成KEY */ String operatorType = "key"; String keyFilePath = "D:/key.k"; DESEncryptUtil.test(keyFilePath, null, operatorType); /** 加密 */ operatorType = "encrypt"; String sourceFilePath = "D:/jdbc_official.properties"; DESEncryptUtil.test(keyFilePath, sourceFilePath, operatorType); /** 解密 */ operatorType = "decrypt"; sourceFilePath = "D:/en_jdbc_official.properties"; DESEncryptUtil.test(keyFilePath, sourceFilePath, operatorType); } /** * <ul> * <li>Description:[创建一个密钥]</li> * <li>Created by [Huyvanpull] [Jul 19, 2010]</li> * <li>Midified by [修改人] [修改时间]</li> * </ul> * * @return * @throws NoSuchAlgorithmException */ public static Key createKey() throws NoSuchAlgorithmException { Security.insertProviderAt(new com.sun.crypto.provider.SunJCE(), 1); KeyGenerator generator = KeyGenerator.getInstance("DES"); generator.init(new SecureRandom()); Key key = generator.generateKey(); return key; } /** * <ul> * <li>Description:[根据流得到密钥]</li> * <li>Created by [Huyvanpull] [Jul 19, 2010]</li> * <li>Midified by [修改人] [修改时间]</li> * </ul> * * @param is * @return */ public static Key getKey(InputStream is) { try { ObjectInputStream ois = new ObjectInputStream(is); return (Key) ois.readObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * <ul> * <li>Description:[对数据进行加密]</li> * <li>Created by [Huyvanpull] [Jul 19, 2010]</li> * <li>Midified by [修改人] [修改时间]</li> * </ul> * * @param key * @param data * @return */ private static byte[] doEncrypt(Key key, byte[] data) { try { Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] raw = cipher.doFinal(data); return raw; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * <ul> * <li>Description:[对数据进行解密]</li> * <li>Created by [Huyvanpull] [Jul 19, 2010]</li> * <li>Midified by [修改人] [修改时间]</li> * </ul> * * @param key * @param in * @return */ public static InputStream doDecrypt(Key key, InputStream in) { try { Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] tmpbuf = new byte[1024]; int count = 0; while ((count = in.read(tmpbuf)) != -1) { bout.write(tmpbuf, 0, count); tmpbuf = new byte[1024]; } in.close(); byte[] orgData = http://www.mamicode.com/bout.toByteArray();>
DecryptPropertyPlaceholderConfigurer.javapackage com.zuidaima.spring; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.security.Key; import java.util.Properties; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.core.io.Resource; import org.springframework.util.DefaultPropertiesPersister; import org.springframework.util.PropertiesPersister; import com.zuidaima.commons.util.DESEncryptUtil; public class DecryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { private Resource[] locations; private Resource keyLocation; private String fileEncoding; public void setKeyLocation(Resource keyLocation) { this.keyLocation = keyLocation; } public void setLocations(Resource[] locations) { this.locations = locations; } public void loadProperties(Properties props) throws IOException { if (this.locations != null) { PropertiesPersister propertiesPersister = new DefaultPropertiesPersister(); for (int i = 0; i < this.locations.length; i++) { Resource location = this.locations[i]; if (logger.isInfoEnabled()) { logger.info("Loading properties file from " + location); } InputStream is = null; try { is = location.getInputStream(); Key key = DESEncryptUtil.getKey(keyLocation.getInputStream()); is = DESEncryptUtil.doDecrypt(key, is); if (fileEncoding != null) { propertiesPersister.load(props, new InputStreamReader( is, fileEncoding)); } else { propertiesPersister.load(props, is); } } finally { if (is != null) { is.close(); } } } } } }
配置文件:<!-- 加密码属性文件 --> <bean id="myPropertyConfigurer" class="com.zuidaima.spring.DecryptPropertyPlaceholderConfigurer"> <property name="locations"> <list><value>classpath*:spring_config/jdbc_official.databaseinfo</value></list> </property> <property name="fileEncoding" value=http://www.mamicode.com/"UTF-8"/>>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。