加密解密

數據加密處理:

package MD5;

import java.io.UnsupportedEncodingException;  
import java.util.ArrayList;  
import java.util.List;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
/** 
 * 數據加密解密處理 
 * @author Administrator 
 * 
 */  
public class QuickSDKDesUtil {  
      
    //正則表達式,用於匹配  
    private final static Pattern pattern = Pattern.compile("\\d+");  
  
    private final static String charset="utf-8";  
  
    //加密處理  
    public static String encode(String src,String key) {   
        try {  
            //獲得一個指定的編碼格式的字節數組,Linux和windows默認的編碼格式不一樣,因此要指定特定的編碼  
            byte[] data = src.getBytes(charset);  
            byte[] keys = key.getBytes();  
            StringBuilder sb = new StringBuilder();  
            for (int i = 0; i < data.length; i++) {  
                //結合key和相應的數據進行加密操做,ofxx的做用是補碼,byte是8bits,而int是32bits  
                int n = (0xff & data[i]) + (0xff & keys[i % keys.length]);  
                sb.append("@" + n);  
            }  
            return sb.toString();  
        }catch (UnsupportedEncodingException e){  
            e.printStackTrace();  
        }  
        return src;  
    }  
  
    //解密處理  
    public static String decode(String src,String key) {  
        if(src == null || src.length() == 0){  
            return src;  
        }  
        //正則表達式字符串匹配  
        Matcher m = pattern.matcher(src);  
          
        List<Integer> list = new ArrayList<Integer>();  
        //find方法(部分匹配):嘗試去發現輸入串中是否匹配相應的子串  
        while (m.find()) {  
            try {  
                //返回匹配到的子字符串  
                String group = m.group();  
                list.add(Integer.valueOf(group));  
            } catch (Exception e) {  
                e.printStackTrace();  
                return src;  
            }  
        }  
          
        //若是有匹配的字符串  
        if (list.size() > 0) {  
            try {  
                byte[] data = new byte[list.size()];  
                byte[] keys = key.getBytes();  
                //相對於加密過程的解密過程  
                for (int i = 0; i < data.length; i++) {  
                    data[i] = (byte) (list.get(i) - (0xff & keys[i % keys.length]));  
                }  
                return new String(data, charset);  
            } catch (UnsupportedEncodingException e){  
                e.printStackTrace();  
            }  
            return src;  
        } else {  
            return src;  
        }  
    }  
}  
數據解密處理

 

package MD5;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;

public class QuickSDKSignUtil {
    static final String encode="UTF-8";    
    //對傳遞的數據進行md5加密
    public static String sign(String signStr){
        //DigestUtils.md5Hex()方法Java調用Apache commons codec實現md5加密,計算MD5摘要並返回值爲32個字符的十六進制字符串
        return shuffleSign(DigestUtils.md5Hex(signStr));
    } 
private static byte[][] shufflePos=new byte[][]{{1,13},{5,17},{7,23}};
    private static String shuffleSign(String src){
        if(src == null || src.length() == 0){
            return src;
        }
        try {
            //獲得一個指定的編碼格式的字節數組
            byte[] bytes=src.getBytes("utf-8");
            byte temp;
            //循環遍歷shufflePos,將二維數組中每位一維數組中的每一個元素進行換位
            for(int i=0; i<shufflePos.length; i++){
                temp=bytes[shufflePos[i][0]];
                bytes[shufflePos[i][0]]=bytes[shufflePos[i][1]];
                bytes[shufflePos[i][1]]=temp;
            }
            return new String(bytes);
        } catch (UnsupportedEncodingException e) {
            return src;
        }
    }
    
}
數據解密處理

 

package MD5;


/** 
 * 加密解密 
 * @author Administrator 
 * 
 */  
public class Demo {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        //雙方約定好的簽名  
        final String key ="1";  
        //數據  
        final String data ="{a:21}";  
          
        //對數據和簽名進行加密處理  
        String nt_data = QuickSDKDesUtil.encode(data, key);  
        System.out.println("加密爲:"+nt_data);  
          
        //對加密後的數據進行md5處理  
        System.out.println("對數據進行md5加密後在進行加密"+QuickSDKSignUtil.sign("nt_data=" + nt_data));  
          
        //對進過md5處理後的數據進行簽名後加密  
        String nt_data2 = QuickSDKDesUtil.encode(QuickSDKSignUtil.sign("nt_data=" + nt_data), key);  
        System.out.println(nt_data2);  
                  
        //對加密後的數據進行解密處理  
        String sign_en = QuickSDKDesUtil.decode(nt_data2, key);  
        System.out.println(sign_en);   
        
        System.out.println("-------------------------------");    
         
        
        //對加密後的數據進行md5處理  
        //對進過md5處理後的數據進行簽名後加密 
        nt_data = "1";
        
       nt_data2 = QuickSDKDesUtil.encode(nt_data,"fds");  
        System.out.println(nt_data2);  
        
        //對加密後的數據進行解密處理  
        sign_en = QuickSDKDesUtil.decode(nt_data2, "fds");  
        System.out.println(sign_en);
        
        
          
    }  
  
}  
寫一個demo
相關文章
相關標籤/搜索