zoukankan      html  css  js  c++  java
  • 加密解密

    数据加密处理:

    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
  • 相关阅读:
    MVC5 Entity Framework学习之Entity Framework高级功能(转)
    js获取当前日期的前一天、一月、一年的日期 明天、后天(转)
    easyui datagrid 分页
    博客园技术精粹集合留贴
    常用C# DateTime 日期计算
    Jquery设置Cookie
    设计模式 -- 装饰者模式
    设计模式 -- 策略模式
    IBatis.Net中调用存储过程
    其他元素条件 IBatisNet
  • 原文地址:https://www.cnblogs.com/xiangyuqi/p/9004614.html
Copyright © 2011-2022 走看看