private static final Cipher DES_CIPHER; static { try { DES_CIPHER = Cipher.getInstance("DES/ECB/NoPadding"); } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { throw Throwables.propagate(e); } } public static String encryptDES(String encryptString, String encryptKey) { try { DES_CIPHER.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(IcbcConstant.ENCODING_GBK), "DES")); byte[] encryptedData = DES_CIPHER.doFinal(encryptString.getBytes(IcbcConstant.ENCODING_GBK)); return new String(encryptedData, IcbcConstant.ENCODING_GBK); } catch (Throwable e) { throw Throwables.propagate(e); } } public static String decryptDES(String decryptString, String decryptKey) { try { DES_CIPHER.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(IcbcConstant.ENCODING_GBK), "DES")); byte decryptedData[] = DES_CIPHER.doFinal(decryptString.getBytes(IcbcConstant.ENCODING_GBK)); return new String(decryptedData, IcbcConstant.ENCODING_GBK); } catch (Throwable e) { throw Throwables.propagate(e); } }
nopadding模式下的補位,此例為補空格。
private static byte[] formatData(String str) { int yu = str.length() % 8; if (yu == 0) { return str.getBytes(Charset.forName(Constants.Charset)); } int size = 8 - yu; byte[] arr = new byte[str.length() + size]; byte[] data = str.getBytes(Charset.forName(Constants.Charset)); int i = 0; for (; i < data.length; i++) { arr[i] = data[i]; } for (int j = 0; j < size; j++, i++) { arr[i] = ' '; } return arr; } private static byte[] formatByte(byte[] arr) { int i = 0; for (; i < arr.length; i++) { if ((char) arr[i] == ' ') { break; } } byte[] result = new byte[i]; System.arraycopy(arr, 0, result, 0, i); return result; }