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;/** * <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 = 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();                    }                }            }        }    }}


配置文件:

  1. <!-- 加密码属性文件 -->  
  2.     <bean id="myPropertyConfigurer"  
  3.         class="com.zuidaima.spring.DecryptPropertyPlaceholderConfigurer">  
  4.         <property name="locations">  
  5.             <list><value>classpath*:spring_config/jdbc_official.databaseinfo</value></list>  
  6.         </property>  
  7.         <property name="fileEncoding" value="UTF-8"/>  
  8.         <property name="keyLocation" value="classpath:spring_config/key.key" />  
  9.     </bean>  
<!-- 加密码属性文件 -->    <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="UTF-8"/>        <property name="keyLocation" value="classpath:spring_config/key.key" />    </bean>
           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值