夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

          加密類:

          package com.framework.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.framework.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.framework.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.framework.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>
          posted on 2010-07-19 17:22 HUIKK 閱讀(1756) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 延庆县| 开平市| 峨边| 钟祥市| 鄂州市| 沧州市| 安陆市| 阳东县| 绥江县| 平南县| 海原县| 巴林左旗| 凌海市| 上蔡县| 彭泽县| 禹城市| 新昌县| 铁岭市| 景宁| 彩票| 吴旗县| 田林县| 洪泽县| 太原市| 灌阳县| 宿州市| 米泉市| 曲阜市| 瓦房店市| 涪陵区| 商都县| 安陆市| 荥经县| 永善县| 探索| 应用必备| 仙居县| 渝北区| 加查县| 宁南县| 新丰县|