java实现AES可逆加密算法

所属分类: 软件编程 / java 阅读数: 26
收藏 0 赞 0 分享

本文实例为大家分享了java实现AES可逆加密算法的具体代码,供大家参考,具体内容如下

package com.hdu.encode;
 
 
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
 
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
/**
 * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化;
 */
public class AESOperator {
 /*
 * 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。
 */
// a0b891c2d563e4f7
 private String sKey = "abcdef0123456789";
 private String ivParameter = "0123456789abcdef";
 private static AESOperator instance = null;
 
 private AESOperator() {
 
 }
 
 public static AESOperator getInstance() {
 if (instance == null)
  instance = new AESOperator();
 return instance;
 }
 
 // 加密
 public String encrypt(String sSrc){
 String result = "";
 try {
  Cipher 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"));
  result = new BASE64Encoder().encode(encrypted);
 } catch (Exception e) {
  e.printStackTrace();
 } 
 // 此处使用BASE64做转码。
 return result;
  
 }
 
 // 解密
 public String 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");
  return originalString;
 } catch (Exception ex) {
  ex.printStackTrace();
  return null;
 }
 }
 
public static void main(String[] args){
 // 需要加密的字串
 String cSrc = "测试";
 System.out.println(cSrc + " 长度为" + cSrc.length());
 // 加密
 long lStart = System.currentTimeMillis();
 String enString = AESOperator.getInstance().encrypt(cSrc);
 System.out.println("加密后的字串是:" + enString + "长度为" + enString.length());
 
 long lUseTime = System.currentTimeMillis() - lStart;
 System.out.println("加密耗时:" + lUseTime + "毫秒");
 // 解密
 lStart = System.currentTimeMillis();
 String DeString = AESOperator.getInstance().decrypt(enString);
 System.out.println("解密后的字串是:" + DeString);
 lUseTime = System.currentTimeMillis() - lStart;
 System.out.println("解密耗时:" + lUseTime + "毫秒");
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

SpringBoot环境搭建及第一个程序运行(小白教程)

这篇文章主要介绍了SpringBoot环境搭建及第一个程序运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

过滤器 和 拦截器的 6个区别(别再傻傻分不清了)

这篇文章主要介绍了过滤器 和 拦截器的 6个区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

SpringBoot整合SpringTask实现定时任务的流程

这篇文章主要介绍了SpringBoot整合SpringTask实现定时任务的流程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

vscode快速引入第三方jar包发QQ邮件

这篇文章主要介绍了vscode快速引入第三方jar包发QQ邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Java Enum和String及int的相互转化示例

这篇文章主要介绍了Java Enum和String及int的相互转化示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring boot如何快速的配置多个Redis数据源

这篇文章主要介绍了Spring boot如何快速的配置多个Redis数据源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 对接腾讯云直播的实现

这篇文章主要介绍了JAVA 对接腾讯云直播的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JavaSE static final及abstract修饰符实例解析

这篇文章主要介绍了JavaSE static final及abstract修饰符实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

SpringBoot定时任务参数运行代码实例解析

这篇文章主要介绍了SpringBoot定时任务运行代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot调用 Shell 脚本实现看门狗功能

这篇文章主要介绍了Spring Boot调用 Shell 脚本实现看门狗功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多