JSON字符串需Aes加密,加密为Hex

前端加密

后端加密

package com.iktapp.api.utils;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils; import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64; public class AESHexUtil { /**
* 加密算法
*/
private static String Algorithm = "AES"; /**
* 算法/模式/补码方式
*/
private static String AlgorithmProvider = "AES/ECB/PKCS5Padding"; /**
* 加密
*
* @param src 原内容
* @param uniqueKey 唯一key
* @return
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws InvalidKeyException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws DecoderException
*/
public static String encrypt(String src, String uniqueKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, DecoderException {
byte[] key = uniqueKey.getBytes();
SecretKey secretKey = new SecretKeySpec(key, Algorithm);
Cipher cipher = Cipher.getInstance(AlgorithmProvider);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherBytes = cipher.doFinal(src.getBytes(StandardCharsets.UTF_8));
return byteToHexString(cipherBytes);
} /**
* 解密
*
* @param enc 加密内容
* @param uniqueKey 唯一key
* @return
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
* @throws InvalidAlgorithmParameterException
* @throws InvalidKeyException
* @throws DecoderException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
*/
public static String decrypt(String enc, String uniqueKey) throws NoSuchPaddingException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidAlgorithmParameterException, InvalidKeyException, DecoderException, BadPaddingException, IllegalBlockSizeException {
byte[] key = uniqueKey.getBytes();
SecretKey secretKey = new SecretKeySpec(key, Algorithm);
Cipher cipher = Cipher.getInstance(AlgorithmProvider);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] hexBytes = hexStringToBytes(enc);
byte[] plainBytes = cipher.doFinal(hexBytes);
return new String(plainBytes, "utf-8");
} /**
* 将byte数组转换为16进制字符串
*
* @param src
* @return
*/
private static String byteToHexString(byte[] src) {
return Hex.encodeHexString(src);
} /**
* 将16进制字符串转换为byte数组
*
* @param hexString
* @return
*/
private static byte[] hexStringToBytes(String hexString) throws DecoderException {
return Hex.decodeHex(hexString.toCharArray());
} /**
* AES加密、解密测试方法
*
* @param args
*/
public static void main(String[] args) {
try {
// 唯一key作为密钥
String uniqueKey = "jfdjk670qEH5lm3b";
// 加密前数据,此处数据与前端数据一致(加密内容包含有时间戳),请注意查看前端加密前数据
String src = "{\"name\":\"何丽\",\"mobile\":\"15757099671\",\"idCard\":\"42230119780801112X\"}";
System.out.println("密钥:" + uniqueKey);
System.out.println("原字符串:" + src);
// 加密
String encrypt = encrypt(src, uniqueKey);
System.out.println("加密:" + encrypt);
// 解密
String aa ="ab98b6ef43d7c492389b7eebc7ee7e6d31f8d8d94474ee5c86591d6bf656b6399e0e104c6c1691764951b52c6d55dc8ea589d68b92e80f3d941daf2d135be649a0a664d2b8cdd6e8114d030206d572fc";
String decrypt = decrypt(aa, uniqueKey);
System.out.println("解密:" + decrypt);
} catch (Exception e) {
e.printStackTrace();
}
}
}

最新文章

  1. Mongodb的安装
  2. C#基础知识简单梳理
  3. js返回上一页并刷新的多种实现方法
  4. 如何在github上fork一个项目来贡献代码以及同步原作者的修改
  5. 转载: Javah生成JNI头文件出现找不到类的错误
  6. Java多态(二)
  7. 【论文:麦克风阵列增强】Signal Enhancement Using Beamforming and Nonstationarity with Applications to Speech
  8. cs224d 自然语言处理作业 problem set3 (一) 实现Recursive Nerual Net Work 递归神经网络
  9. Spring多数据源解决方案
  10. 理解linux网络管理命令
  11. java 根据实体对象生成 增删改的SQL语句 ModelToSQL
  12. Java_IO异常处理方式_入门小笔记
  13. PL/SQL学习笔记之触发器
  14. 分布式事务之TCC服务设计和实现注意事项
  15. 读DataSnap源代码(二)
  16. Atcoder Grand 011 C - Squared Graph
  17. shell加密
  18. 青蛙的约会---poj1061(扩展欧几里德)
  19. angularJs按需加载代码(未验证)
  20. GDOI2018滚粗记

热门文章

  1. java反射基础知识整理
  2. Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法
  3. C语言常用知识总结
  4. 多行文字自动换行居中--实测好用的很OK
  5. 超级容易理解的Three.js中的物体rotation
  6. vue学习笔记(一)---- vue指令(在vue中使用样式的方式)
  7. Selenium中免登录的实现方法一option
  8. 剑指Offer 05. 替换空格(java解题)
  9. python判断密码连续,重复,大小写、数字、符号混合密码复杂度要求
  10. P29_全局配置 - window - 导航栏