public class AESUtil {

private static String key= "123456";

/**

* 加密

* @param content待加密内容

* @param key 加密的密钥

* @return

*/

public static String encrypt(String content, String key) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");//构造密钥生成器,指定为AES算法,不区分大小写

kgen.init(128, new SecureRandom(key.getBytes()));

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");

byte[] byteContent = content.getBytes("utf-8");

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);//ENCRYPT_MODE指加密操作

byte[] byteRresult = cipher.doFinal(byteContent);

StringBuffer sb = new StringBuffer();

for (int i = 0; i < byteRresult.length; i++) {

String hex = Integer.toHexString(byteRresult[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}

/**

* 解密

* @param content 待解密内容

* @param key 解密的密钥

* @return

*/

public static String decrypt(String content, String key) {

if (content.length() < 1)

return null;

byte[] byteRresult = new byte[content.length() / 2];

for (int i = 0; i < content.length() / 2; i++) {

int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);

int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2),16);

byteRresult[i] = (byte) (high * 16 + low);

}

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

secureRandom.setSeed(key.getBytes());

kgen.init(128, secureRandom);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);//Decrypt_mode指解密操作

byte[] result = cipher.doFinal(byteRresult);

return new String(result,"utf-8");//不加utf-8,中文时会乱码

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}catch (Exception e) {

e.printStackTrace();

}

return null;

}

//重载的方法,使用默认密钥

public static String decrypt(String content) {

return decrypt(content, key);

}

public static String encrypt(String content) {

return encrypt(content, key);

}

java对数据加解密_java 使用AES对数据进行加密和解密相关推荐

  1. golang实现AES ECB模式的加密和解密

    最近有一个需求需要在golang中实现AES ECB模式的加密和解密,  看了一下官方文档和相关资料发现golang 官方包并没有完善的实现,于是自己尝试写了一个,本文中的AES算法是基于ECB模式, ...

  2. Paging3、Room使用,1、从本地Room数据库加载 2、直接网络获取数据加载 3、网络访问数据到Room数据库再加载 4、封装使用

    目录 1.从本地Room数据库加载数据 viewmodel fragment中使用 页面 数据库相关 2.直接网络获取数据加载 3.网络访问数据到Room数据库再加载数据 自定义RemoteMedia ...

  3. java des加密解密_JAVA和c# 之间数据通讯时通过DES进行加密解密

    c#开发前端时调用java开发的接口,需要数据加密后通讯.两边都需要同时通过DES(BASE64)进行加解密. 代码如下 c#端: 加密 public static String Encrypt(St ...

  4. java 类 重新加载_Java动态类加载和重新加载的详细介绍

    本篇文章给大家带来的内容是关于Java动态类加载和重新加载的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Java中可以在运行时加载和重新加载类,虽然并不像我们想像中那么简 ...

  5. 【Java类加载机制】深入类加载器(二)自定义加密、解密类加载器

    类加载器原理 将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口. 类加载 ...

  6. python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...

    1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...

  7. java对文件的处理(读取,写入,复制,加密和解密)

    这个文件处理的实现具备的功能有:文件读取,文件写入,文件复制,文件加密以及文件解密. 其实在平时文件加密的操作中,我们可以简单的通过修改文件的后缀名来改变文件的打开方式,也就是常说的:"一定 ...

  8. 数据中心密码翻译、eas用户密码的加密和解密

    1.加密和解密datacenter的数据库密码 加密:com.kingdee.bos.sql.KSqlUtil.encodePassword(password); 解密: 1.管理控制台执行 deco ...

  9. java excel 导入 加校验_Java 利用POI进行excel文件导入时校验数据,并且追加错误批注...

    首先拿到前端file控件上传的excel文件,到后台接收!拿到excel这就不多说了网上很多demo的,下面直接说校验单元格追加批注信息的 private void setpz(Workbook wo ...

最新文章

  1. SpringBoot使用AOP
  2. 使用 “vue-cropper“进行图片裁剪
  3. NURBS曲线与曲面
  4. 【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
  5. DQL 学习-- DQL 基本元素
  6. JQuery Dialog UI按钮文字国际化
  7. SPOJ OTOCI 动态树 LCT
  8. 古老的txt下传和txt上载
  9. 计算机科学与技术研究生课表,计算机科学与技术专业2018级研究生课程表.doc
  10. 工业相机像元与像素之间的关系
  11. 文献调研(一):基于集成学习和能耗模式分类的办公楼小时能耗预测
  12. 宏病毒的研究与实例分析01——基础篇
  13. 招聘数据采集+Hive数据分析+数据可视化
  14. 实测对比:2层和4层板的干扰和辐射差异
  15. Android Studio设置http proxy加速下载(亲测有效)
  16. Zxing图片识别 从相册选二维码图片解析总结
  17. 什么是Core Dump?
  18. ibm笔记本修复计算机开机按,IBM X280开机报错,按了Esc后正常解决方法
  19. arcgis风向_arcgis趋势分析
  20. 物联网开源组件安全:Node-RED白盒审计

热门文章

  1. Kubernetes(K8S)各种错误及解决方法
  2. android 原子文件,Android原子操作
  3. xp计算机无法远程桌面连接,XP sp3系统下远程桌面不能连接到指定计算机的解决方案...
  4. CentOS安装QEMU(试验成功且简单的方法)
  5. optifine下载_如何优化Optifine以获得流畅的Minecraft体验
  6. LCD显示屏的优势与缺点浅析
  7. C# DAL层数据库操作类SqlHelper
  8. 我的世界java版红石电梯_《我的世界》红石电梯建造教程
  9. 第一周python学习
  10. 李开复做客CCTV《面对面》:世界因我而不同