AES128Bit ECB加解密算法:
public static String Encrypt(String data,String key) throws Exception{ byte[] raw = HexUtils.hexStr2ByteArr(key); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// "算法/模式/补码方式" cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] inData = HexUtils.hexStr2ByteArr(data); byte[] outData = cipher.doFinal(inData); return HexUtils.byteArr2HexStr(outData); } /** * 16进制字符串转字节数组,单字节(双字符)转单字节 * * @param data * @return */ public static byte[] hexStr2ByteArr(String data) { if (data == null || data.equals("")) { return null; } data = data.toUpperCase(); int length = data.length() / 2; char[] hexChars = data.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; // 另一种写法 // public static byte[] hexStrToByteArr(String data) { // if ((data == null) || (data.length() < 2)) // return null; // int len = data.length() / 2; // byte[] buffer = new byte[len]; // for (int i = 0; i < len; i++) { // buffer[i] = (byte) Integer.parseInt(data.substring(i * 2, i * 2 + 2), // 16); // } // return buffer; // } }
public static String byteArr2HexStr(byte[] data) { String hs = ""; String stmp = ""; for (int n = 0; n < data.length; n++) { stmp = (Integer.toHexString(data[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp + ""; else hs = hs + stmp + ""; } return hs.toUpperCase(); }
/** * AES128bit ECB解密 * * @param data * 16进制数据,16字节整数倍 * @param key * 16进制数据,16字节 * @return * @throws Exception */ public static String Decrypt(String data, String key) throws Exception { if (data.length() % 32 != 0) { System.out.println("数据不是16字节整数倍"); return null; } if (key.length() != 32) { System.out.print("Key长度不是16字节"); return null; } byte[] raw = HexUtils.hexStr2ByteArr(key); SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// "算法/模式/补码方式" cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] inData = HexUtils.hexStr2ByteArr(data); byte[] outData = cipher.doFinal(inData); return HexUtils.byteArr2HexStr(outData); }