package com.bcxin.signature.util.common.cipher;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;

/**   
 * BASE64加密解密   
 */    
public class BASE64Util     
{     
    
    /**    
     * BASE64解密   
     * @param key          
     * @return          
     * @throws Exception          
     */
	public static String decryptBASE64(String key) throws Exception {               
        return new String(decryptBASE64Byte(key), "utf-8");            
    }
	
    public static byte[] decryptBASE64Byte(String key) throws Exception {               
        return (new BASE64Decoder()).decodeBuffer(key);               
    }               
                  
    /**         
     * BASE64加密   
     * @param key          
     * @return          
     * @throws Exception          
     */
    public static String encryptBASE64(String key) throws Exception { 
    	byte[] byteKey = key.getBytes("utf-8");
        return encryptBASE64Byte(byteKey).replaceAll("\r\n", "").replaceAll("\n", "");               
    }
    
    public static String encryptBASE64Byte(byte[] key) throws Exception {               
        return (new BASE64Encoder()).encodeBuffer(key);               
    }       
      
    
    //图片转化成base64字符串
    public static String GetImageStr(String imgFile) {//将图片文件转化为字节数组字符串，并对其进行Base64编码处理
     // String imgFile = "d://test.jpg";//待处理的图片
      InputStream in = null;
      byte[] data = null;
      //读取图片字节数组
      try {
          in = new FileInputStream(imgFile);
          data = new byte[in.available()];
          in.read(data);
          in.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
      //对字节数组Base64编码
      BASE64Encoder encoder = new BASE64Encoder();
      return encoder.encode(data);//返回Base64编码过的字节数组字符串
    }
        
      //base64字符串转化成图片  
      public static boolean GenerateImage(String imgStr,String imgFilePath)  
      {   //对字节数组字符串进行Base64解码并生成图片  
    	  imgStr = imgStr.replace("data:image/png;base64,", "");
          if (imgStr == null) //图像数据为空  
              return false;  
          BASE64Decoder decoder = new BASE64Decoder();  
          try   
          {  
              //Base64解码  
              byte[] b = decoder.decodeBuffer(imgStr);  
              for(int i=0;i<b.length;++i)  
              {  
                  if(b[i]<0)  
                  {//调整异常数据  
                      b[i]+=256;  
                  }  
              }  
              //生成jpeg图片  
              //String imgFilePath = "d://222.jpg";//新生成的图片  
              //imgFilePath = imgFilePath + System.currentTimeMillis()+".jpg";
              OutputStream out = new FileOutputStream(imgFilePath);      
              out.write(b);  
              out.flush();  
              out.close();  
              return true;  
          }   
          catch (Exception e)   
          {  
              return false;  
          }  
      } 
      
      
    public static void main(String[] args) throws Exception     
    {     
//        String data = BASE64Util.encryptBASE64("http://aub.iteye.com/解密后");     
//        System.out.println("加密前："+data);     
//             
//        String byteArray = BASE64Util.decryptBASE64(data);     
//        System.out.println("解密后："+byteArray);     
    	String str = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8cG9saWN5U2FsZVJlcXVlc3Q+CiAgICA8YWRkcmVzc0xpbmVzPuWOpumXqOaAneaYjuWQjuWfrea6qui3rzI45Y+3MTHmpbwxMTEx5Y+3PC9hZGRyZXNzTGluZXM+CiAgICA8YmlydGhEYXRlPjE5ODQtMDgtMDM8L2JpcnRoRGF0ZT4KICAgIDxjb3JlQ29kZT5NWV9HQVNfMDAxPC9jb3JlQ29kZT4KICAgIDxjb3JlTmFtZT7mtYvor5Xnh4PmsJTpmak8L2NvcmVOYW1lPgogICAgPGVtYWlsPjg2OTk2OTBAcXEuY29tPC9lbWFpbD4KICAgIDxleHRlcm5hbFJlZmVyZW5jZT5NWV9HQVNfMDAxPC9leHRlcm5hbFJlZmVyZW5jZT4KICAgIDxmdWxsTmFtZT7otbXpo548L2Z1bGxOYW1lPgogICAgPGdlbmRlcj5NPC9nZW5kZXI+CiAgICA8aWROdW1iZXI+MjEwMTEzMTk4NDA4MDMxNjU2PC9pZE51bWJlcj4KICAgIDxpZFR5cGU+SURDQVJEPC9pZFR5cGU+CiAgICA8aW5zdXJhbmNlQ29tcGFueUNvZGU+QUlHPC9pbnN1cmFuY2VDb21wYW55Q29kZT4KICAgIDxpbnN1cmVkcz4KICAgICAgICA8YWRkcmVzc0xpbmVzPuWOpumXqOaAneaYjuWQjuWfrea6qui3rzI45Y+3MTHmpbwxMTEx5Y+3PC9hZGRyZXNzTGluZXM+CiAgICAgICAgPGJpcnRoRGF0ZT4xOTg0LTA4LTAzPC9iaXJ0aERhdGU+CiAgICAgICAgPGVtYWlsPjg2OTk2OTBAcXEuY29tPC9lbWFpbD4KICAgICAgICA8ZnVsbE5hbWU+6LW16aOePC9mdWxsTmFtZT4KICAgICAgICA8Z2VuZGVyPk08L2dlbmRlcj4KICAgICAgICA8aWROdW1iZXI+MjEwMTEzMTk4NDA4MDMxNjU2PC9pZE51bWJlcj4KICAgICAgICA8aWRUeXBlPklEQ0FSRDwvaWRUeXBlPgogICAgICAgIDxtb2JpbGVOdW1iZXI+MTg2MTE5OTk1MDU8L21vYmlsZU51bWJlcj4KICAgIDwvaW5zdXJlZHM+CiAgICA8bG9naW5OYW1lPmFkbWluPC9sb2dpbk5hbWU+CiAgICA8bW9iaWxlTnVtYmVyPjE4NjExOTk5NTA1PC9tb2JpbGVOdW1iZXI+CiAgICA8cHJvZHVjdFR5cGU+TElGRTwvcHJvZHVjdFR5cGU+CjwvcG9saWN5U2FsZVJlcXVlc3Q+Cg==";
    	String out = str.replace("+", "%2B");
    	System.out.println(out);
    }     
}
