6 changed files with 151 additions and 28 deletions
@ -0,0 +1,78 @@ |
|||||
|
package com.epmet.opendata.util; |
||||
|
|
||||
|
import javax.crypto.Cipher; |
||||
|
import javax.crypto.spec.SecretKeySpec; |
||||
|
|
||||
|
/*** |
||||
|
* Aes加解密工具类 |
||||
|
* @author www |
||||
|
* @date 2022/6/6/0006 11:07 |
||||
|
*/ |
||||
|
public class AesUtils { |
||||
|
|
||||
|
|
||||
|
public static String encryptByAES(String input, String key) throws Exception { |
||||
|
// 算法
|
||||
|
String algorithm = "AES"; |
||||
|
String transformation = "AES"; |
||||
|
// Cipher:密码,获取加密对象
|
||||
|
// transformation:参数表示使用什么类型加密
|
||||
|
Cipher cipher = Cipher.getInstance(transformation); |
||||
|
// 指定秘钥规则
|
||||
|
// 第一个参数表示:密钥,key的字节数组 长度必须是16位
|
||||
|
// 第二个参数表示:算法
|
||||
|
SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm); |
||||
|
// 对加密进行初始化
|
||||
|
// 第一个参数:表示模式,有加密模式和解密模式
|
||||
|
// 第二个参数:表示秘钥规则
|
||||
|
cipher.init(Cipher.ENCRYPT_MODE, sks); |
||||
|
// 进行加密
|
||||
|
byte[] bytes = cipher.doFinal(input.getBytes()); |
||||
|
return bytesToHexString(bytes); |
||||
|
} |
||||
|
|
||||
|
public static String decryptByAES(String input, String key) throws Exception { |
||||
|
// 算法
|
||||
|
String algorithm = "AES"; |
||||
|
String transformation = "AES"; |
||||
|
// Cipher:密码,获取加密对象
|
||||
|
// transformation:参数表示使用什么类型加密
|
||||
|
Cipher cipher = Cipher.getInstance(transformation); |
||||
|
// 指定秘钥规则
|
||||
|
// 第一个参数表示:密钥,key的字节数组 长度必须是16位
|
||||
|
// 第二个参数表示:算法
|
||||
|
SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm); |
||||
|
// 对加密进行初始化
|
||||
|
// 第一个参数:表示模式,有加密模式和解密模式
|
||||
|
// 第二个参数:表示秘钥规则
|
||||
|
cipher.init(Cipher.DECRYPT_MODE, sks); |
||||
|
// 进行解密
|
||||
|
byte[] inputBytes = hexStringToBytes(input); |
||||
|
byte[] bytes = cipher.doFinal(inputBytes); |
||||
|
return new String(bytes); |
||||
|
} |
||||
|
|
||||
|
private static byte[] hexStringToBytes(String hexString) { |
||||
|
if (hexString.length() % 2 != 0) throw new IllegalArgumentException("hexString length not valid"); |
||||
|
int length = hexString.length() / 2; |
||||
|
byte[] resultBytes = new byte[length]; |
||||
|
for (int index = 0; index < length; index++) { |
||||
|
String result = hexString.substring(index * 2, index * 2 + 2); |
||||
|
resultBytes[index] = Integer.valueOf(Integer.parseInt(result, 16)).byteValue(); |
||||
|
} |
||||
|
return resultBytes; |
||||
|
} |
||||
|
|
||||
|
private static String bytesToHexString(byte[] sources) { |
||||
|
if (sources == null) return null; |
||||
|
StringBuilder stringBuffer = new StringBuilder(); |
||||
|
for (byte source : sources) { |
||||
|
String result = Integer.toHexString(source & 0xff); |
||||
|
if (result.length() < 2) { |
||||
|
result = "0" + result; |
||||
|
} |
||||
|
stringBuffer.append(result); |
||||
|
} |
||||
|
return stringBuffer.toString(); |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue