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

      1 import javax.crypto.*;
      2 import javax.crypto.spec.SecretKeySpec;
      3 import java.io.UnsupportedEncodingException;
      4 import java.security.InvalidKeyException;
      5 import java.security.MessageDigest;
      6 import java.security.NoSuchAlgorithmException;
      7 import java.security.SecureRandom;
      8 import java.util.Base64;
      9 import java.util.Random;
     10 
     11 public class EncryptUtil {
     12    
     13     public static String MD5Purity(String plainText) {
     14         try {
     15             MessageDigest md = MessageDigest.getInstance("MD5");
     16             md.update(plainText.getBytes());
     17             byte b[] = md.digest();
     18             int i;
     19             StringBuffer buf = new StringBuffer("");
     20             for (int offset = 0; offset < b.length; offset++) {
     21                 i = b[offset];
     22                 if (i < 0) {
     23                     i += 256;
     24                 }
     25                 if (i < 16) {
     26                     buf.append("0");
     27                 }
     28                 buf.append(Integer.toHexString(i));
     29             }
     30             plainText = buf.toString();
     31         } catch (NoSuchAlgorithmException e) {
     32             e.printStackTrace();
     33         }
     34         return plainText.toLowerCase();
     35     }
     36 
     37     public static int GetRandom(int max, int min) {
     38         Random random = new Random();
     39         int s = random.nextInt(max) % (max - min + 1) + min;
     40         return s;
     41     }
     42  
     43     public static String aesEncrypt(String str, String key) throws Exception {
     44         if (str == null || key == null) {
     45             return null;
     46         }
     47         str = ZipUtils.gzip(str);
     48         Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
     49         cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
     50         byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
     51         return Base64.getEncoder().encodeToString(bytes);
     52     }
     53 
     54  
     55     public static String aesDecrypt(String str, String key) throws Exception {
     56         if (str == null || key == null) {
     57             return null;
     58         }
     59         Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
     60         cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
     61         byte[] bytes = Base64.getDecoder().decode(str);
     62         bytes = cipher.doFinal(bytes);
     63         return ZipUtils.gunzip(new String(bytes, "utf-8"));
     64     }
     65 
     66      
     67     public static String MwEncrypt(String shopguid, String token, String seed, String data) throws Exception {
     68         int start = GetRandom(9, 3);
     69         int end = GetRandom(9, 3);
     70         String keyseed = shopguid + token + seed.substring(start * end, start * end + end);
     71         String key = EncryptUtil.MD5Purity(keyseed);
     72         String encry = EncryptUtil.aesEncrypt(System.currentTimeMillis() + data, key);
     73         if (encry.indexOf("==") == encry.length() - 2) {
     74             encry = "2" + encry.substring(0, encry.indexOf("=="));
     75             ;
     76         } else if (encry.indexOf("=") == encry.length() - 1) {
     77             encry = "1" + encry.substring(0, encry.indexOf("="));
     78         } else {
     79             encry = "a" + encry;
     80         }
     81         String autograph = EncryptUtil.MD5Purity(encry);
     82         autograph = start + autograph + end;
     83         encry = autograph.toUpperCase() + encry;
     84         return encry;
     85     }
     86 
     87      
     88     public static String MwEncryptaut(String shopguid, String token, String seed, String data) throws Exception {
     89         int start = GetRandom(9, 3);
     90         int end = GetRandom(9, 3);
     91         System.out.println("start = [" + start + "], end = [" + end + "]");
     92         String keyseed = shopguid + token + seed.substring(start * end, start * end + end);
     93         String key = EncryptUtil.MD5Purity(keyseed);
     94         String encry = ZipUtils.gzip(System.currentTimeMillis() + data);
     95         // EncryptUtil.aesEncrypt(System.currentTimeMillis()+data, key);
     96         if (encry.indexOf("==") == encry.length() - 2) {
     97             encry = "2" + encry.substring(0, encry.indexOf("=="));
     98             ;
     99         } else if (encry.indexOf("=") == encry.length() - 1) {
    100             encry = "1" + encry.substring(0, encry.indexOf("="));
    101         } else {
    102             encry = "a" + encry;
    103         }
    104         String autograph = EncryptUtil.MD5Purity(encry + key);
    105         autograph = start + autograph + end;
    106         encry = autograph.toUpperCase() + encry;
    107         return encry;
    108     }
    109     public static String MwDecryptaut(String shopguid, String token, String seed, String data) throws Exception {
    110         //System.out.println("body_str:"+data);
    111         if (data.length() < 35) {
    112             throw new Exception("601");
    113         }
    114         String autograph = data.substring(0, 34);
    115         int start = Integer.parseInt(autograph.substring(0, 1));
    116         int end = Integer.parseInt(autograph.substring(33, 34));
    117         //System.out.println("start:"+start+":::end:"+end);
    118         String keyseed = shopguid + token + seed.substring(start * end, start * end + end);
    119         String key = EncryptUtil.MD5Purity(keyseed);
    120         autograph = autograph.substring(1, 33);
    121         data = data.substring(34, data.length());
    122         String autograph_ne = EncryptUtil.MD5Purity(data + key).toUpperCase();
    123         if (!autograph_ne.equals(autograph)) {
    124             throw new Exception("602");
    125         }
    126         String vl = data.substring(0, 1);
    127         data = data.substring(1, data.length());
    128         if (vl.equals("2")) {
    129             data = data + "==";
    130         } else if (vl.equals("1")) {
    131             data = data + "=";
    132         }
    133         String Decryptstr = ZipUtils.gunzip(data);
    134         long stl = Long.parseLong(Decryptstr.substring(0, 13));
    135         long ltl = System.currentTimeMillis();
    136         long lp = (ltl - stl) / (1000 * 60);
    137 
    138         if (Math.abs(lp) > 10) {
    139             throw new Exception("603");
    140         }
    141         Decryptstr = Decryptstr.substring(13, Decryptstr.length());
    142         return Decryptstr;
    143     }
    144     public static void main(String[] args) throws Exception {
    145         String str = MwEncryptaut("0001", "0c5f6f217aabb2ea742b0944cd5020f3", "yW2we6Vqf73Qd3pg4mE209949t968lB6957n981i3LtQezfF9z0LDi08d9Li2c52X8h7v5MY3l7000537foITmq49yie8a71lM40", "1");
    146         System.out.println(str);
    147         String destr= MwDecryptaut("0001", "0c5f6f217aabb2ea742b0944cd5020f3", "yW2we6Vqf73Qd3pg4mE209949t968lB6957n981i3LtQezfF9z0LDi08d9Li2c52X8h7v5MY3l7000537foITmq49yie8a71lM40",str );
    148         System.out.println(destr);
    149     }
    150     */
    151     public static String MwDecrypt(String shopguid, String token, String seed, String data) throws Exception {
    152         if (data.length() < 35) {
    153             throw new Exception("601");
    154         }
    155         String autograph = data.substring(0, 34);
    156         int start = Integer.parseInt(autograph.substring(0, 1));
    157         int end = Integer.parseInt(autograph.substring(33, 34));
    158         //System.out.println("start:"+start+":::end:"+end);
    159         autograph = autograph.substring(1, 33);
    160         data = data.substring(34, data.length());
    161         String autograph_ne = EncryptUtil.MD5Purity(data).toUpperCase();
    162         if (!autograph_ne.equals(autograph)) {
    163             throw new Exception("602");
    164         }
    165         String vl = data.substring(0, 1);
    166         data = data.substring(1, data.length());
    167         if (vl.equals("2")) {
    168             data = data + "==";
    169         } else if (vl.equals("1")) {
    170             data = data + "=";
    171         }
    172         //System.out.println("data:"+data);
    173         //System.out.println("seed:"+seed);
    174         String keyseed = shopguid + token + seed.substring(start * end, start * end + end);
    175         String key = EncryptUtil.MD5Purity(keyseed);
    176         //System.out.println("key:"+key);
    177         String Decryptstr = EncryptUtil.aesDecrypt(data, key);
    178         long stl = Long.parseLong(Decryptstr.substring(0, 13));
    179         long ltl = System.currentTimeMillis();
    180         long lp = (ltl - stl) / (1000 * 60);
    181         if (Math.abs(lp) > 10) {
    182             throw new Exception("603");
    183         }
    184         Decryptstr = Decryptstr.substring(13, Decryptstr.length());
    185         return Decryptstr;
    186     }
    187 
    188     public static byte[] encrypt(String content, String password) {
    189         try {
    190             KeyGenerator kgen = KeyGenerator.getInstance("AES");
    191             kgen.init(128, new SecureRandom(password.getBytes()));
    192             SecretKey secretKey = kgen.generateKey();
    193             byte[] enCodeFormat = secretKey.getEncoded();
    194             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
    195             Cipher cipher = Cipher.getInstance("AES");
    196             byte[] byteContent = content.getBytes("utf-8");
    197             cipher.init(Cipher.ENCRYPT_MODE, key);
    198             byte[] result = cipher.doFinal(byteContent);
    199             return result; // ����
    200         } catch (NoSuchAlgorithmException e) {
    201             e.printStackTrace();
    202         } catch (NoSuchPaddingException e) {
    203             e.printStackTrace();
    204         } catch (InvalidKeyException e) {
    205             e.printStackTrace();
    206         } catch (UnsupportedEncodingException e) {
    207             e.printStackTrace();
    208         } catch (IllegalBlockSizeException e) {
    209             e.printStackTrace();
    210         } catch (BadPaddingException e) {
    211             e.printStackTrace();
    212         }
    213         return null;
    214     }
    215 
    216      
    217     public static byte[] decrypt(byte[] content, String password) {
    218         try {
    219             KeyGenerator kgen = KeyGenerator.getInstance("AES");
    220             kgen.init(128, new SecureRandom(password.getBytes()));
    221             SecretKey secretKey = kgen.generateKey();
    222             byte[] enCodeFormat = secretKey.getEncoded();
    223             SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
    224             Cipher cipher = Cipher.getInstance("AES");
    225             cipher.init(Cipher.DECRYPT_MODE, key);
    226             byte[] result = cipher.doFinal(content);
    227             return result; // ����
    228         } catch (NoSuchAlgorithmException e) {
    229             e.printStackTrace();
    230         } catch (NoSuchPaddingException e) {
    231             e.printStackTrace();
    232         } catch (InvalidKeyException e) {
    233             e.printStackTrace();
    234         } catch (IllegalBlockSizeException e) {
    235             e.printStackTrace();
    236         } catch (BadPaddingException e) {
    237             e.printStackTrace();
    238         }
    239         return null;
    240     }
    241 
    242      
    243     public static String parseByte2HexStr(byte buf[]) {
    244         StringBuffer sb = new StringBuffer();
    245         for (int i = 0; i < buf.length; i++) {
    246             String hex = Integer.toHexString(buf[i] & 0xFF);
    247             if (hex.length() == 1) {
    248                 hex = '0' + hex;
    249             }
    250             sb.append(hex.toUpperCase());
    251         }
    252         return sb.toString();
    253     }
    254 
    255      
    256     public static byte[] parseHexStr2Byte(String hexStr) {
    257         if (hexStr.length() < 1) {
    258             return null;
    259         }
    260         byte[] result = new byte[hexStr.length() / 2];
    261         for (int i = 0; i < hexStr.length() / 2; i++) {
    262             int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
    263             int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
    264             result[i] = (byte) (high * 16 + low);
    265         }
    266         return result;
    267     }
    268 
    269     /*****************************************************************************************************************/
    270  
    271     private static String encryptAes(String input, String key) {
    272         byte[] crypted = null;
    273         try {
    274             SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
    275             Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    276             cipher.init(Cipher.ENCRYPT_MODE, skey);
    277             crypted = cipher.doFinal(input.getBytes());
    278         } catch (Exception e) {
    279             System.out.println(e.toString());
    280         }
    281         return replaceSpecial(Base64.getEncoder().encodeToString(crypted));
    282     }
    283 
    284   
    285     public static String replaceSpecial(String s) {
    286         s = s.replaceAll("=", "-Z");
    287         s = s.replaceAll("\+", "Y-B");
    288         s = s.replaceAll("/", "X-C");
    289         return s;
    290     }
    291 
    292  
    293     public static String encrypt(String data) {
    294         String key = "!@#$won9)6*^43^2";
    295         return encryptAes(data, key);
    296     }
    297  
    298     public static String encryptPassword(String password) {
    299         if (password.isEmpty()) {
    300             return "";
    301         }
    302         String val = password + "cardmwee";
    303         MessageDigest sh1 = null;
    304         try {
    305             sh1 = MessageDigest.getInstance("SHA-1");
    306         } catch (NoSuchAlgorithmException e) {
    307             e.printStackTrace();
    308         }
    309         sh1.update(val.getBytes());
    310         byte[] m = sh1.digest(); 
    311         return byte2hex(m);
    312     }
    313  
    314     public static String byte2hex(byte[] b) {
    315         String hs = "";
    316         String stmp = "";
    317         for (int n = 0; n < b.length; n++) {
    318             stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
    319             if (stmp.length() == 1) {
    320                 hs = hs + "0" + stmp;
    321             } else {
    322                 hs = hs + stmp;
    323             }
    324         }
    325         return hs;
    326     }
    327 
    328     public static String sha1(String decript) {
    329         try {
    330             MessageDigest digest = java.security.MessageDigest
    331                     .getInstance("SHA-1");
    332             digest.update(decript.getBytes());
    333             byte messageDigest[] = digest.digest();
    334             // Create Hex String
    335             StringBuffer hexString = new StringBuffer();
    336         
    337             for (int i = 0; i < messageDigest.length; i++) {
    338                 String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
    339                 if (shaHex.length() < 2) {
    340                     hexString.append(0);
    341                 }
    342                 hexString.append(shaHex);
    343             }
    344             return hexString.toString();
    345 
    346         } catch (NoSuchAlgorithmException e) {
    347             e.printStackTrace();
    348         }
    349         return "";
    350     }
    351 }
    View Code
    package mpos.api.cloud.crypt;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.Base64;
    import java.util.zip.*;
    
    public class ZipUtils {
    
        public static String gzip(String primStr) {
            if (primStr == null || primStr.length() == 0) {
                return primStr;
            }
    
            ByteArrayOutputStream out = new ByteArrayOutputStream();
    
            GZIPOutputStream gzip = null;
            try {
                gzip = new GZIPOutputStream(out);
    
                gzip.write(primStr.getBytes("UTF-8"));
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (gzip != null) {
                    try {
                        gzip.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
    //        return new sun.misc.BASE64Encoder().encode(out.toByteArray());
    
            return Base64.getEncoder().encodeToString(out.toByteArray());
        }
    
    
        public static String gunzip(String compressedStr) {
            if (compressedStr == null) {
                return null;
            }
    
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayInputStream in = null;
            GZIPInputStream ginzip = null;
            byte[] compressed = null;
            String decompressed = null;
            try {
    //            compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
                compressed = Base64.getDecoder().decode(compressedStr);
                in = new ByteArrayInputStream(compressed);
                ginzip = new GZIPInputStream(in);
    
                byte[] buffer = new byte[1024];
                int offset = -1;
                while ((offset = ginzip.read(buffer)) != -1) {
                    out.write(buffer, 0, offset);
                }
    
                decompressed = out.toString("UTF-8");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (ginzip != null) {
                    try {
                        ginzip.close();
                    } catch (IOException e) {
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
                }
            }
    
            return decompressed;
        }
    
    
        public static final String zip(String str) {
            if (str == null) {
                return null;
            }
            byte[] compressed;
            ByteArrayOutputStream out = null;
            ZipOutputStream zout = null;
            String compressedStr = null;
            try {
                out = new ByteArrayOutputStream();
                zout = new ZipOutputStream(out);
                zout.putNextEntry(new ZipEntry("0"));
                zout.write(str.getBytes("UTF-8"));
                zout.closeEntry();
                compressed = out.toByteArray();
    //            compressedStr = new sun.misc.BASE64Encoder().encodeBuffer(compressed);
                compressedStr = Base64.getEncoder().encodeToString(compressed);
            } catch (IOException e) {
                compressed = null;
            } finally {
                if (zout != null) {
                    try {
                        zout.close();
                    } catch (IOException e) {
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
                }
            }
            return compressedStr;
        }
    
    
        public static final String unzip(String compressedStr) {
            if (compressedStr == null) {
                return null;
            }
    
            ByteArrayOutputStream out = null;
            ByteArrayInputStream in = null;
            ZipInputStream zin = null;
            String decompressed = null;
            try {
    //            byte[] compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
                byte[] compressed = Base64.getDecoder().decode(compressedStr);
                out = new ByteArrayOutputStream();
                in = new ByteArrayInputStream(compressed);
                zin = new ZipInputStream(in);
                zin.getNextEntry();
                byte[] buffer = new byte[1024];
                int offset = -1;
                while ((offset = zin.read(buffer)) != -1) {
                    out.write(buffer, 0, offset);
                }
                decompressed = out.toString("UTF-8");
            } catch (IOException e) {
                decompressed = null;
            } finally {
                if (zin != null) {
                    try {
                        zin.close();
                    } catch (IOException e) {
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
                }
            }
            return decompressed;
        }
    }
    View Code
  • 相关阅读:
    JQuery计算当前Dom结构在浏览器窗口中被显示方法(懒加载原理)
    图片png24格式在IE6下半透明解决办法
    CSS方式支持IE6的fixed样式
    ecshop模板首页或列表页显示商品简单描述
    ecshop静态、 ecshop伪静态、ecshop伪静态设置详细方法、ECSHOP静态化方法
    批量清除ecshop全部商品的精品 新品和热销属性的方法
    ecshop商品页显示累计销售量,ecshop显示商品销售总数量的方法
    常用JQuery插件整理、前端适用
    ecshop销售排行榜显示销售 销量的商品的件数方法
    Ecshop IIS Rewrite伪静态规则
  • 原文地址:https://www.cnblogs.com/youngerliu/p/10238521.html
Copyright © 2011-2022 走看看