DES算法加密

DES算法加密

  1. public class Des {
  2.     public static final String ALGORITHM_DES = “DES/CBC/PKCS5Padding”;
  3.     /**
  4.      * DES算法,加密
  5.      *
  6.      * @param data
  7.      *            待加密字符串
  8.      * @param key
  9.      *            加密私钥,长度不能够小于8位
  10.      * @return 加密后的字节数组,一般结合Base64编码使用
  11.      * @throws CryptException
  12.      *             异常
  13.      */
  14.     public static String encode(String key, String data) throws Exception {
  15.         return encode(key, data.getBytes());
  16.     }
  17.     /**
  18.      * DES算法,加密
  19.      *
  20.      * @param data
  21.      *            待加密字符串
  22.      * @param key
  23.      *            加密私钥,长度不能够小于8位
  24.      * @return 加密后的字节数组,一般结合Base64编码使用
  25.      * @throws CryptException
  26.      *             异常
  27.      */
  28.     public static String encode(String key, byte[] data) throws Exception {
  29.         try {
  30.             DESKeySpec dks = new DESKeySpec(key.getBytes());
  31.             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DES”);
  32.             // key的长度不能够小于8位字节
  33.             Key secretKey = keyFactory.generateSecret(dks);
  34.             Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
  35.             IvParameterSpec iv = new IvParameterSpec(“12345678”.getBytes());
  36.             AlgorithmParameterSpec paramSpec = iv;
  37.             cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);
  38.             byte[] bytes = cipher.doFinal(data);
  39.             return new String(Base64.encode(bytes));
  40.         } catch (Exception e) {
  41.             throw new Exception(e);
  42.         }
  43.     }
  44.     /**
  45.      * DES算法,解密
  46.      *
  47.      * @param data
  48.      *            待解密字符串
  49.      * @param key
  50.      *            解密私钥,长度不能够小于8位
  51.      * @return 解密后的字节数组
  52.      * @throws Exception
  53.      *             异常
  54.      */
  55.     public static byte[] decode(String key, byte[] data) throws Exception {
  56.         try {
  57.             SecureRandom sr = new SecureRandom();
  58.             DESKeySpec dks = new DESKeySpec(key.getBytes());
  59.             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DES”);
  60.             // key的长度不能够小于8位字节
  61.             Key secretKey = keyFactory.generateSecret(dks);
  62.             Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
  63.             IvParameterSpec iv = new IvParameterSpec(“12345678”.getBytes());
  64.             AlgorithmParameterSpec paramSpec = iv;
  65.             cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
  66.             return cipher.doFinal(data);
  67.         } catch (Exception e) {
  68.             throw new Exception(e);
  69.         }
  70.     }
  71.     /**
  72.      * 获取编码后的值
  73.      *
  74.      * @param key
  75.      * @param data
  76.      * @return
  77.      * @throws Exception
  78.      */
  79.     public static String decodeValue(String key, String data) {
  80.         byte[] datas;
  81.         String value = null;
  82.         try {
  83.             if (System.getProperty(“os.name”) != null
  84.                     && (System.getProperty(“os.name”).equalsIgnoreCase(“sunos”) || System
  85.                             .getProperty(“os.name”).equalsIgnoreCase(“linux”))) {
  86.                 datas = decode(key, Base64.decode(data));
  87.             } else {
  88.                 datas = decode(key, Base64.decode(data));
  89.             }
  90.             value = new String(datas);
  91.         } catch (Exception e) {
  92.             value = “”;
  93.         }
  94.         return value;
  95.     }
  96.     public static void main(String[] args) throws Exception {
  97.         String str = Des.encode(
  98.                 new String(Base64.encode(“1111111”.getBytes())), “魏sdfs艺荣”);
  99.         System.out.println(“明文:” + str);
  100.         System.out.println(“解密后:”
  101.                 + Des.decodeValue(
  102.                         new String(Base64.encode(“1111111”.getBytes())), str));
  103.     }
  104. }

标签