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

      1 package com.favorites.utils;
      2 
      3 import javax.crypto.Cipher;
      4 import javax.crypto.SecretKey;
      5 import javax.crypto.SecretKeyFactory;
      6 import javax.crypto.spec.DESedeKeySpec;
      7 import javax.crypto.spec.IvParameterSpec;
      8 import javax.crypto.spec.SecretKeySpec;
      9 import java.security.Key;
     10 
     11 public class Des3EncryptionUtil {
     12     public static final String CHAR_ENCODING = "UTF-8";
     13 
     14     public static byte[] encode(byte[] key, byte[] data) throws Exception {
     15         final String Algorithm = "DESede";
     16 
     17         SecretKey deskey = new SecretKeySpec(key, Algorithm);
     18 
     19         Cipher c1 = Cipher.getInstance(Algorithm);
     20         c1.init(Cipher.ENCRYPT_MODE, deskey);
     21         return c1.doFinal(data);
     22     }
     23 
     24     public static byte[] decode(byte[] key, byte[] value) throws Exception {
     25         final String Algorithm = "DESede";
     26 
     27         SecretKey deskey = new SecretKeySpec(key, Algorithm);
     28 
     29         Cipher c1 = Cipher.getInstance(Algorithm);
     30         c1.init(Cipher.DECRYPT_MODE, deskey);
     31         return c1.doFinal(value);
     32     }
     33 
     34     public static String encode(String key, String data) {
     35         try {
     36             byte[] keyByte = key.getBytes(CHAR_ENCODING);
     37             byte[] dataByte = data.getBytes(CHAR_ENCODING);
     38             byte[] valueByte = encode(keyByte, dataByte);
     39             String value = new String(Base64.encode(valueByte), CHAR_ENCODING);
     40             return value;
     41         } catch (Exception e) {
     42             e.printStackTrace();
     43             return null;
     44         }
     45     }
     46 
     47     public static String decode(String key, String value) {
     48         try {
     49             byte[] keyByte = key.getBytes(CHAR_ENCODING);
     50             byte[] valueByte = Base64.decode(value.getBytes(CHAR_ENCODING));
     51             byte[] dataByte = decode(keyByte,valueByte);
     52             String data = new String(dataByte, CHAR_ENCODING);
     53             return data;
     54         } catch (Exception e) {
     55             e.printStackTrace();
     56             return null;
     57         }
     58     }
     59 
     60     public static String encryptToHex(String key, String data) {
     61         try {
     62             byte[] keyByte = key.getBytes(CHAR_ENCODING);
     63             byte[] dataByte = data.getBytes(CHAR_ENCODING);
     64             byte[] valueByte = encode(keyByte, dataByte);
     65             String value = toHex(valueByte);
     66             return value;
     67         } catch (Exception e) {
     68             e.printStackTrace();
     69             return null;
     70         }
     71     }
     72 
     73     public static String decryptFromHex(String key, String value) {
     74         try {
     75             byte[] keyByte = key.getBytes(CHAR_ENCODING);
     76             byte[] valueByte = fromHex(value);
     77             byte[] dataByte = decode(keyByte,valueByte);
     78             String data = new String(dataByte, CHAR_ENCODING);
     79             return data;
     80         } catch (Exception e) {
     81             e.printStackTrace();
     82             return null;
     83         }
     84     }
     85 
     86     public static String udpEncrypt(String key, String data) {
     87         try {
     88             Key k = updGenerateKey(key);
     89             IvParameterSpec IVSpec = new IvParameterSpec(new byte[8]);
     90             Cipher c = Cipher.getInstance("DESede/CBC/PKCS5Padding");
     91             c.init(1, k, ((IVSpec)));
     92             byte output[] = c.doFinal(data.getBytes("UTF-8"));
     93             return new String(Base64.encode(output), "UTF-8");
     94         } catch (Exception e) {
     95             e.printStackTrace();
     96             return null;
     97         }
     98     }
     99 
    100     public static Key updGenerateKey(String key) {
    101         try {
    102             DESedeKeySpec KeySpec = new DESedeKeySpec(UdpHexDecode(key));
    103             SecretKeyFactory KeyFactory = SecretKeyFactory
    104                     .getInstance("DESede");
    105             Key k = ((KeyFactory.generateSecret(((KeySpec)))));
    106             return k;
    107         } catch (Exception e) {
    108             e.printStackTrace();
    109             return null;
    110         }
    111     }
    112 
    113     public static String udpDecrypt(String key, String data) {
    114         try {
    115             byte[] input = Base64.decode(data.getBytes("UTF-8"));
    116             Key k = updGenerateKey(key);
    117             IvParameterSpec IVSpec = new IvParameterSpec(new byte[8]);
    118             Cipher c = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    119             c.init(2, k, ((IVSpec)));
    120             byte output[] = c.doFinal(input);
    121             return new String(output, "UTF-8");
    122         } catch (Exception e) {
    123             e.printStackTrace();
    124             return null;
    125         }
    126     }
    127 
    128     public static byte[] UdpHexDecode(String s) {
    129         byte abyte0[] = new byte[s.length() / 2];
    130         String s1 = s.toLowerCase();
    131         for (int i = 0; i < s1.length(); i += 2) {
    132             char c = s1.charAt(i);
    133             char c1 = s1.charAt(i + 1);
    134             int j = i / 2;
    135             if (c < 'a')
    136                 abyte0[j] = (byte) (c - 48 << 4);
    137             else
    138                 abyte0[j] = (byte) ((c - 97) + 10 << 4);
    139             if (c1 < 'a')
    140                 abyte0[j] += (byte) (c1 - 48);
    141             else
    142                 abyte0[j] += (byte) ((c1 - 97) + 10);
    143         }
    144         return abyte0;
    145     }
    146 
    147     public static String toHex(byte input[]) {
    148         if (input == null)
    149             return null;
    150         StringBuffer output = new StringBuffer(input.length * 2);
    151         for (int i = 0; i < input.length; i++) {
    152             int current = input[i] & 0xff;
    153             if (current < 16)
    154                 output.append("0");
    155             output.append(Integer.toString(current, 16));
    156         }
    157 
    158         return output.toString();
    159     }
    160     
    161     public static byte[] fromHex(String input) {
    162         if (input == null)
    163             return null;
    164         byte output[] = new byte[input.length() / 2];
    165         for (int i = 0; i < output.length; i++)
    166             output[i] = (byte) Integer.parseInt(
    167                     input.substring(i * 2, (i + 1) * 2), 16);
    168 
    169         return output;
    170     }
    171 }
  • 相关阅读:
    [note]抽象类和接口的相同点和不同点
    百度竞价门再跟踪:违规医疗广告数量仍大幅增加
    获取拼音的第一个字母的方法
    一个分页存储过程
    正则表达式(Regular Expressions)
    四个故事
    Oracle 常用
    我很喜欢的一个[帖子]:从现在起,我开始还债。
    DataGrid 中的 HyperLinkColumn (可以携带多个Get参数)
    100 statements in English.
  • 原文地址:https://www.cnblogs.com/myknow/p/9540985.html
Copyright © 2011-2022 走看看