事情的经过是这个样子的。。。。。。
        先说说问题是怎么出现的。根据客户需求,需要完成一个一键登录的功能,于是我的项目中就诞生了DesUtil,但是经过几百次测试,发现有一个登录直接报错!难道又遇到神坑啦!!
让我们先看看源代码,干货来了!
       package com.kwp.main.util.security;
 import java.io.IOException;
 import java.security.SecureRandom;
  
 import javax.crypto.Cipher;
 import javax.crypto.SecretKey;
 import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.DESKeySpec;
  
 import sun.misc.BASE64Decoder;
 import sun.misc.BASE64Encoder;
  
 public class DesUtil {
  
     private final static String DES = "DES";
     public final static String KEY = "EA22DAB57022E2560A376749E3408196A9E287D800E068E5";
     /**
      * Description 根据键值进行加密
      * @param data
      * @param key  加密键byte数组
      * @return
      * @throws Exception
      */
     public static String encrypt(String data, String key) throws Exception {
         byte[] bt = encrypt(data.getBytes(), key.getBytes());
         String strs = new BASE64Encoder().encode(bt);
         return strs;
     }
  
     /**
      * Description 根据键值进行解密
      * @param data
      * @param key  加密键byte数组
      * @return
      * @throws IOException
      * @throws Exception
      */
     public static String decrypt(String data, String key) throws IOException,
             Exception {
         if (data == null)
             return null;
         BASE64Decoder decoder = new BASE64Decoder();
         byte[] buf = decoder.decodeBuffer(data);
         byte[] bt = decrypt(buf,key.getBytes());
         return new String(bt);
     }
  
     /**
      * Description 根据键值进行加密
      * @param data
      * @param key  加密键byte数组
      * @return
      * @throws Exception
      */
     private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
         // 生成一个可信任的随机数源
         SecureRandom sr = new SecureRandom();
  
         // 从原始密钥数据创建DESKeySpec对象
         DESKeySpec dks = new DESKeySpec(key);
  
         // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
         SecretKey securekey = keyFactory.generateSecret(dks);
  
         // Cipher对象实际完成加密操作
         Cipher cipher = Cipher.getInstance(DES);
  
         // 用密钥初始化Cipher对象
         cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
  
         return cipher.doFinal(data);
     }
      
      
     /**
      * Description 根据键值进行解密
      * @param data
      * @param key  加密键byte数组
      * @return
      * @throws Exception
      */
     private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
         // 生成一个可信任的随机数源
         SecureRandom sr = new SecureRandom();
  
         // 从原始密钥数据创建DESKeySpec对象
         DESKeySpec dks = new DESKeySpec(key);
  
         // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
         SecretKey securekey = keyFactory.generateSecret(dks);
  
         // Cipher对象实际完成解密操作
         Cipher cipher = Cipher.getInstance(DES);
  
         // 用密钥初始化Cipher对象
         cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
  
         return cipher.doFinal(data);
     }
     
     public static void main(String[] args)throws Exception{
         //加密
         System.out.println(DesUtil.encrypt("zhaohui", DesUtil.KEY));
         System.out.println(DesUtil.encrypt("0", DesUtil.KEY));
         //解密
         System.out.println(DesUtil.decrypt("/sVcz2jGgPQ=", DesUtil.KEY));
     }
 }