package com.chainlan.common.utils;
import java.util.HashMap;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class AesUtils {
private String sKey = "72a2334af5d6b70f";//key
private String ivParameter = "a979ed23ddb5eec8";//偏移量
private static AesUtils instance = null;
private AesUtils() {
}
public static AesUtils getInstance() {
if (instance == null)
instance = new AesUtils();
return instance;
}
// 加密
public String encrypt(HashMap<Object,Object> content) throws Exception {
String sSrc=RsaUtils.hashMapToString(content);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
return new BASE64Encoder().encode(encrypted);// 此处使用BASE64做转码。
}
// 解密
public HashMap<Object,Object> decrypt(String sSrc){
try {
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);// 先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original, "utf-8");
HashMap<Object,Object> h=RsaUtils.stringToHashMap(originalString);
return h;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
/**
* 获取随机字符串
* @param length
* @return
*/
private static String getRandomString(int length) { //length表示生成字符串的长度
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
}
java AES 加解密
最新推荐文章于 2024-07-15 03:46:20 发布