Java List<Map<String,Object>>数据加密传输
一、转为JSON数据加密传输
//加密工具类 public class AesUtils { private static final String ALGORITHM_CBC = "AES/CBC/PKCS5Padding"; private static final String ALGORITHM_TYPE = "AES"; private static final String KEY = "you_key"; private static final String IV = "you_iv"; private static final String CHARSET = "UTF-8"; /** * * @param text * @return 加密后返回16进制字符串对象 * @throws Exception */ public static String encrypt(String text) throws Exception { // 获取实例 Cipher cilper = Cipher.getInstance(ALGORITHM_CBC); SecretKey secretKey = new SecretKeySpec(KEY.getBytes(UTF8), ALGORITHM_TYPE); // 初始化加解密对象,设置key,和加密规则/解密规则 IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(UTF8)); cilper.init(Cipher.ENCRYPT_MODE,secretKey,ivParameterSpec); byte[] doFinal = cilper.doFinal(text.getBytes(UTF8)); return Hex.encodeHexString(doFinal); } /** * * @param encodetext hex加密字符串 * @return 返回明文字符串 * @throws Exception */ public static String decrypt(String encodetext) throws Exception{ // 获取实例 Cipher cilper = Cipher.getInstance(ALGORITHM_CBC); SecretKey secretKey = new SecretKeySpec(KEY.getBytes(UTF8), ALGORITHM_TYPE); // 初始化加解密对象,设置key,和加密规则/解密规则 IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(UTF8)); cilper.init(Cipher.DECRYPT_MODE,secretKey,ivParameterSpec); byte[] doFinal = cilper.doFinal( Hex.decodeHex(encodetext)); return new String(doFinal,UTF8); } }
示例:
public static void main(String[] args) throws Exception { List<Map<String, Object>> data = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("name", "Alice"); map1.put("age", 5); data.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("name", "nick"); map2.put("age", 15); data.add(map2); //字典列表转为JSON String datalist = JSON.toJSONString(data); //加密JSON datalist = AesUtils.encrypt(datalist); // 存储或传输加密后的数据 //解密字符串 datalist = AesUtils.decrypt(datalist); Gson gson = new Gson(); // 将字符串转换为 JsonArray JsonArray jsonArray = gson.fromJson(datalist, JsonArray.class); // 遍历 JsonArray 获取每个元素 for (int i = 0; i < jsonArray.size(); i++) { System.out.println("name: " + jsonArray.get(i).getAsJsonObject().get("name")); System.out.println("age: " + jsonArray.get(i).getAsJsonObject().get("age")); } }
二、序列化数据加密传输
Aes加密工具类
//加密工具类 public class AesUtils { private static final String ALGORITHM_CBC = "AES/CBC/PKCS5Padding"; private static final String ALGORITHM_TYPE = "AES"; private static final String KEY = "you_key"; private static final String IV = "you_iv"; private static final String CHARSET = "UTF-8"; public static byte[] encrypt(byte[] data) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(CHARSET),ALGORITHM_TYPE); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(CHARSET)); Cipher cipher = Cipher.getInstance(ALGORITHM_CBC); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); return cipher.doFinal(data); } public static byte[] decrypt(byte[] encryptedData) throws Exception { SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(CHARSET),ALGORITHM_TYPE); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(CHARSET)); Cipher cipher = Cipher.getInstance(ALGORITHM_CBC); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); return cipher.doFinal(encryptedData); } }
示例:
public static void main(String[] args) throws Exception { List<Map<String, Object>> data = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("name", "Alice"); map1.put("age", 5); data.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("name", "nick"); map2.put("age", 15); data.add(map2); // 序列化并加密数据 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(data); oos.flush(); byte[] serializedData = bos.toByteArray(); byte[] encryptedData = encrypt(serializedData); //将byte数组转为base64 String base64Str = DatatypeConverter.printBase64Binary(encryptedData); // 存储或传输加密后的数据 //将base64转为数组 byte[] bytes = DatatypeConverter.parseBase64Binary(base64Str); // 解密并反序列化数据 byte[] decryptedData = decrypt(encryptedData); ByteArrayInputStream bis = new ByteArrayInputStream(decryptedData); ObjectInputStream ois = new ObjectInputStream(bis); List<Map<String, Object>> decryptedList = (List<Map<String, Object>>) ois.readObject(); // 使用解密后的数据进行进一步处理 for (Map<String, Object> map : decryptedList) { System.out.println("name: " + map.get("name")); System.out.println("age: " + map.get("age")); } }