package com.artfess.base.util; import com.artfess.base.exception.BaseException; import lombok.extern.slf4j.Slf4j; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * 对接泛微des加密工具 */ @Slf4j public class DES { private String pwd = null; public DES(String paramString) { this.pwd = paramString; } /** * 加密 * * @param paramString * @return */ public String encode(String paramString) { byte[] arrayOfByte1 = null; try { if (this.pwd == null) this.pwd = "ecology9"; DESKeySpec localDESKeySpec = new DESKeySpec(this.pwd.getBytes()); SecretKeyFactory localSecretKeyFactory = SecretKeyFactory.getInstance("DES"); SecretKey localSecretKey = localSecretKeyFactory.generateSecret(localDESKeySpec); Cipher localCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); localCipher.init(1, localSecretKey); byte[] arrayOfByte2 = paramString.getBytes(); arrayOfByte1 = localCipher.doFinal(arrayOfByte2); } catch (Exception localException) { log.error("加密异常!", localException); return null; } return parseByte2HexStr(arrayOfByte1); } /** * 解密 * * @param paramString * @return */ public String decode(String paramString) { byte[] arrayOfByte1 = null; byte[] arrayOfByte2 = parseHexStr2Byte(paramString); try { if (this.pwd == null) this.pwd = "ecology9"; DESKeySpec localDESKeySpec = new DESKeySpec(this.pwd.getBytes()); SecretKeyFactory localSecretKeyFactory = SecretKeyFactory.getInstance("DES"); SecretKey localSecretKey = localSecretKeyFactory.generateSecret(localDESKeySpec); Cipher localCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); localCipher.init(Cipher.DECRYPT_MODE, localSecretKey); arrayOfByte1 = localCipher.doFinal(arrayOfByte2); } catch (Exception localException) { log.error("解密异常!", localException); throw new BaseException("账号解密异常!"); } return new String(arrayOfByte1); } public boolean setPwd(String paramString) { this.pwd = paramString; return true; } public boolean setIv(String paramString) { return true; } private String parseByte2HexStr(byte[] paramArrayOfByte) { StringBuffer localStringBuffer = new StringBuffer(); for (int i = 0; i < paramArrayOfByte.length; ++i) { String str = Integer.toHexString(paramArrayOfByte[i] & 0xFF); if (str.length() == 1) { str = '0' + str; } localStringBuffer.append(str.toUpperCase()); } return localStringBuffer.toString(); } private byte[] parseHexStr2Byte(String paramString) { if (paramString.length() < 1) { return null; } byte[] arrayOfByte = new byte[paramString.length() / 2]; for (int i = 0; i < paramString.length() / 2; ++i) { int j = Integer.parseInt(paramString.substring(i * 2, i * 2 + 1), 16); int k = Integer.parseInt(paramString.substring(i * 2 + 1, i * 2 + 2), 16); arrayOfByte[i] = (byte) (j * 16 + k); } return arrayOfByte; } public static void main(String[] args) { DES des = new DES(null); String enc = des.encode("admin"); System.out.println("加密后:" + enc); System.out.println("加密前:" + des.decode(enc)); } }