package com.app.nf_9501.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class DesUtil { /** * 将字符串转化为UTF8格式进行DES编码,不足8个字节在API内部自动补齐 * * @param encryptString 要进行加密的字符串 * @param encryptKey 字符串加密KEY * @return 加密完成的字符串 * @throws cipher.doFina解析异常 */ public static String encryptDES(String encryptString, String encryptKey)throws Exception { if (encryptString.trim().equals("")) { return encryptString; } byte[] iv = encryptKey.getBytes(); IvParameterSpec zeroIv = new IvParameterSpec(iv); SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv); byte[] encryptedData = cipher.doFinal(encryptString.getBytes()); String str = bytesToHexString(encryptedData); return str; } public static String decryptDES(String decryptString, String encryptKey)throws Exception { if (decryptString.trim().equals("")) { return decryptString; } byte[] iv = encryptKey.getBytes(); IvParameterSpec zeroIv = new IvParameterSpec(iv); SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes(), "DES"); Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, key, zeroIv); byte[] encryptedData = hexStringToBytes(decryptString); String str = new String(cipher.doFinal(encryptedData)); return str; } /** * Convert byte[] to hex string. * * @param src byte[] data * * @return hex string */ private static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * Convert hex string to byte[] * * @param hexString * the hex string * @return byte[] */ private static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * Convert char to byte * * @param c * char * @return byte */ private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } }