以下方法输入格式:HEX,输出格式:HEX(注释的代码输入格式:UTF8,输出格式:UTF8);密钥使用的是固定的string格式,并且密钥长度要满足16
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
public static String encryptToHex(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 使用PKCS5Padding,等同于PKCS#7Padding
cipher.init(Cipher.ENCRYPT_MODE, key);
// byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
byte[] encryptedBytes = cipher.doFinal(hexStringToByteArray(data));
// 将加密后的字节转换为十六进制字符串
StringBuilder hexString = new StringBuilder(2 * encryptedBytes.length);
for (byte b : encryptedBytes) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
return hexString.toString().toUpperCase();
}
public static String decryptFromHex(String hex, SecretKey key) throws Exception {
// 将十六进制字符串转换回字节
byte[] data = new byte[hex.length() / 2];
for (int i = 0; i < data.length; i++) {
int index = i * 2;
int value = Integer.parseInt(hex.substring(index, index + 2), 16);
data[i] = (byte) value;
}
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decryptedBytes = cipher.doFinal(data);
// return new String(decryptedBytes, StandardCharsets.UTF_8);
return ByteUtils.byteArrayToHexString(decryptedBytes);
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
}
return data;
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
}