package com.hujiang.juice.common.utils; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.security.SecureRandom; import java.util.Base64; /** * Created by xujia on 2016/8/24. */ public class DESUtil { public static final byte[] desKey = new byte[]{21, 1, -110, 82, -32, -85, -128, -65}; /** * 数据加密,算法(DES) * * @param data * 要进行加密的数据 * @param desKey DES密钥 * @return 加密后的数据 */ public static String encrypt(String data, byte[] desKey) { String encryptedData = null; try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); DESKeySpec deskey = new DESKeySpec(desKey); // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(deskey); // 加密对象 Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key, sr); // 加密,并把字节数组编码成字符串 encryptedData = Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes())); } catch (Exception e) { // log.error("加密错误,错误信息:", e); throw new RuntimeException("加密错误,错误信息:", e); } return encryptedData; } /** * 向前兼容,key固定 * @deprecated * @param data 要加密的数据 * @return 加密后的数据 */ public static String encrypt(String data){ return encrypt(data, desKey); } /** * 数据解密,算法(DES) * * @param cryptData * 加密数据 * @param desKey DES密钥 * @return 解密后的数据 */ public static String decrypt(String cryptData, byte[] desKey) { String decryptedData = null; try { // DES算法要求有一个可信任的随机数源 SecureRandom sr = new SecureRandom(); DESKeySpec deskey = new DESKeySpec(desKey); // 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey key = keyFactory.generateSecret(deskey); // 解密对象 Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key, sr); // 把字符串解码为字节数组,并解密 decryptedData = new String(cipher.doFinal(Base64.getDecoder().decode(cryptData))); } catch (Exception e) { // log.error("解密错误,错误信息:", e); throw new RuntimeException("解密错误,错误信息:", e); } return decryptedData; } /** * 向前兼容,key固定 * @deprecated * @param cryptData 加密数据 * @return 解密后的数据 */ public static String decrypt(String cryptData){ return decrypt(cryptData, desKey); } public static void main(String[] args){ String encryptString= encrypt("9$r05YT*6G", desKey); System.out.println(encryptString); String desencryptString = decrypt(encryptString, desKey); System.out.println(desencryptString); } }