Java AES加密解密的简单实现方法

 更新时间:2017年06月12日 08:50:18   投稿:jingxian  
下面小编就为大家带来一篇Java AES加密解密的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

废话不多说,直接上代码

package com.mstf.aes;
 
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
 
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
 
/**
 * AES加密解密
 * @author ceet
 *
 */
public class AESUntil {
 /**
  * 加密
  *
  *
  */
 public static String Ecodes(String content, String key) {
  if (content == null || content.length() < 1)
   return null;
 
  try {
   KeyGenerator kgen = KeyGenerator.getInstance("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);
   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;
 }
 
 /**
  * 解密
  *
  *
  */
 public static String Dcodes(String content, String key) {
  if (content == null || content.length() < 1)
   return null;
 
  if (content.trim().length() < 19)
   return content;
 
  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");
   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");
   cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
   byte[] result = cipher.doFinal(byteRresult);
   return new String(result);
  } 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();
  }
  return null;
 }
 
 /**
  * 详细解释
  * 【ceet为加密的密匙】
  * 【admin为需要加密的字符串】
  * 【67BE5ED967DBA9B9810C295BE6DEF5D5为解密后的字符串】
  * 【如果更改ceet,那么67BE5ED967DBA9B9810C295BE6DEF5D5字符串会发生变化】
  * @param args
  */
 // 调用测试
 public static void main(String[] args) {
  System.out.println("需要加密的内容:"+Ecodes("admin", "ceet"));
  System.out.println("经过解密的内容:"+Dcodes("67BE5ED967DBA9B9810C295BE6DEF5D5", "ceet"));
 }
}

以上这篇Java AES加密解密的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • struts1之简单mvc示例_动力节点Java学院整理

    struts1之简单mvc示例_动力节点Java学院整理

    这篇文章主要介绍了struts1之简单mvc示例的相关资料,需要的朋友可以参考下
    2017-09-09
  • nacos服务注册服务发现依赖配置详解

    nacos服务注册服务发现依赖配置详解

    这篇文章主要为大家介绍了nacos服务注册服务发现依赖配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • nacos客户端如何获取配置

    nacos客户端如何获取配置

    这篇文章主要介绍了nacos客户端如何获取配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • java实现电话本管理系统

    java实现电话本管理系统

    这篇文章主要为大家详细介绍了JAVA实现电话本管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 为IntelliJ IDEA配置JVM参数的两种方法

    为IntelliJ IDEA配置JVM参数的两种方法

    在使用IntelliJ IDEA进行Java开发时,合理配置JVM参数对于优化项目性能和资源管理至关重要,IntelliJ IDEA提供了两种方便的方式来设置JVM参数,本文将详细介绍这两种方法:通过工具栏编辑配置和通过服务编辑配置,需要的朋友可以参考下
    2024-12-12
  • java Executors工具类的相关方法使用创建

    java Executors工具类的相关方法使用创建

    这篇文章主要为大家介绍了java Executors工具类的相关方法使用创建,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Java程序中实现调用Python脚本的方法详解

    Java程序中实现调用Python脚本的方法详解

    这篇文章主要介绍了Java程序中实现调用Python脚本的方法,结合实例形式分析了eclipse环境中使用Java调用Python脚本的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-03-03
  • SpringBoot任意版本集成Swagger各种版本的操作指南

    SpringBoot任意版本集成Swagger各种版本的操作指南

    在学习Swagger生成API文档的时候经常会遇到问题,而目前市面上大部分技术分享者的SpringBoot版本并没和我们的同步,导致一些一模一样的代码,在我们的项目上却无法使用,这是一个经常性的问题,本文章就旨在和大家搞定SpringBoot任意版本集成Swagger各种版本
    2024-07-07
  • Android中PreferenceFragment的使用详解

    Android中PreferenceFragment的使用详解

    本文主要介绍了Android中PreferenceFragment的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • SpringBoot集成RabbitMQ和概念介绍

    SpringBoot集成RabbitMQ和概念介绍

    这篇文章主要介绍了SpringBoot集成RabbitMQ和概念介绍,RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。更多相关内容需要的小伙伴可以参考一下下面文章内容
    2022-05-05

最新评论