java spring中对properties属性文件加密及其解密

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

原创整理不易,转载请注明出处: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;/** * 
     *
  • Title:[DESEncryptUtil]
  •  *
  • Description: [加密码解密类]
  •  *
  • Copyright 2009 RoadWay Co., Ltd.
  •  *
  • All right reserved.
  •  *
  • Created by [Huyvanpull] [Jul 19, 2010]
  •  *
  • Midified by [修改人] [修改时间]
  •  *
 *  * @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);    }    /**     *
         *
  • Description:[创建一个密钥]
  •      *
  • Created by [Huyvanpull] [Jul 19, 2010]
  •      *
  • Midified by [修改人] [修改时间]
  •      *
     *      * @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;    }        /**     *
         *
  • Description:[根据流得到密钥]
  •      *
  • Created by [Huyvanpull] [Jul 19, 2010]
  •      *
  • Midified by [修改人] [修改时间]
  •      *
     *      * @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);        }    }        /**     *
         *
  • Description:[对数据进行加密]
  •      *
  • Created by [Huyvanpull] [Jul 19, 2010]
  •      *
  • Midified by [修改人] [修改时间]
  •      *
     *      * @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);        }    }        /**     *
         *
  • Description:[对数据进行解密]
  •      *
  • Created by [Huyvanpull] [Jul 19, 2010]
  •      *
  • Midified by [修改人] [修改时间]
  •      *
     *      * @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 = bout.toByteArray();            byte[] raw = cipher.doFinal(orgData);            ByteArrayInputStream bin = new ByteArrayInputStream(raw);            return bin;        }        catch (Exception e)        {            e.printStackTrace();            throw new RuntimeException(e);        }    }        private static void test(String keyFilePath, String sourceFilePath,            String operatorType) throws Exception    {        // 提供了Java命令使用该工具的功能        if (operatorType.equalsIgnoreCase("key"))        {            // 生成密钥文件            Key key = DESEncryptUtil.createKey();            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(keyFilePath));            oos.writeObject(key);            oos.close();            System.out.println("成功生成密钥文件" + keyFilePath);        }        else if (operatorType.equalsIgnoreCase("encrypt"))        {            // 对文件进行加密            File file = new File(sourceFilePath);            FileInputStream in = new FileInputStream(file);            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 = bout.toByteArray();            Key key = getKey(new FileInputStream(keyFilePath));            byte[] raw = DESEncryptUtil.doEncrypt(key, orgData);            file = new File(file.getParent() + "\\en_" + file.getName());            FileOutputStream out = new FileOutputStream(file);            out.write(raw);            out.close();            System.out.println("成功加密,加密文件位于:" + file.getAbsolutePath());        }        else if (operatorType.equalsIgnoreCase("decrypt"))        {            // 对文件进行解密            File file = new File(sourceFilePath);            FileInputStream fis = new FileInputStream(file);                        Key key = getKey(new FileInputStream(keyFilePath));            InputStream raw = DESEncryptUtil.doDecrypt(key, fis);            ByteArrayOutputStream bout = new ByteArrayOutputStream();            byte[] tmpbuf = new byte[1024];            int count = 0;            while ((count = raw.read(tmpbuf)) != -1)            {                bout.write(tmpbuf, 0, count);                tmpbuf = new byte[1024];            }            raw.close();            byte[] orgData = bout.toByteArray();            file = new File(file.getParent() + "\\rs_" + file.getName());            FileOutputStream fos = new FileOutputStream(file);            fos.write(orgData);            System.out.println("成功解密,解密文件位于:" + file.getAbsolutePath());        }    }}


DecryptPropertyPlaceholderConfigurer.java

package 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();                    }                }            }        }    }}


配置文件:

[xml] view plain copy print ?
  1.   
  2.     <bean id="myPropertyConfigurer"  
  3.         class="com.zuidaima.spring.DecryptPropertyPlaceholderConfigurer">  
  4.         <property name="locations">  
  5.             <list><value>classpath*:spring_config/jdbc_official.databaseinfovalue>list>  
  6.         property>  
  7.         <property name="fileEncoding" value="UTF-8"/>  
  8.         <property name="keyLocation" value="classpath:spring_config/key.key" />  
  9.     bean>  
                        classpath*:spring_config/jdbc_official.databaseinfo                            
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

你可能感兴趣的:(java spring中对properties属性文件加密及其解密)