AES算法
2021-05-02 13:28
标签:except data else secret 数据 equals amp 解密 byte AES128Bit ECB加解密算法: AES算法 标签:except data else secret 数据 equals amp 解密 byte 原文地址:https://www.cnblogs.com/wangpengpeng/p/13202757.htmlpublic 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 ) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) ]));
}
return d;
// 另一种写法
// public static byte[] hexStrToByteArr(String data) {
// if ((data == null) || (data.length() // return null;
// int len = data.length() / 2;
// byte[] buffer = new byte[len];
// for (int i = 0; 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 ) {
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);
}