加密解密
Posted 项羽齐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密解密相关的知识,希望对你有一定的参考价值。
数据加密处理:
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); } }
以上是关于加密解密的主要内容,如果未能解决你的问题,请参考以下文章
Android 高级UI解密 :PathMeasure截取片段 与 切线(新思路实现轨迹变换)
Android 高级UI解密 :PathMeasure截取片段 与 切线(新思路实现轨迹变换)
Android 高级UI解密 :PathMeasure截取片段 与 切线(新思路实现轨迹变换)