資料加密處理:
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); } }