自定义的一个对称加密工具类AESUtil.java

    public static final String ENCRYPTION_ALGORITHM = "AES";
public static final String CIPHER_PARAM = "AES/CBC/PKCS5Padding";
private static final String DEFAULT_KEY_AND_IV = "1234567890ABCDEF";//带偏移量的密钥和偏移量似乎是固定16位长度的
private static AESUtil instance = null; /** 偏移量 **/
private static IvParameterSpec iv;
/** 密钥 **/
private static SecretKeySpec key; /**
* @Title: getInstance
* @Description: 单例AES加密工具,使用默认的密钥以及偏移量
* @return AESUtil
* @author hanzhiyong
* @date 2019-4-26下午4:51:12
*/
public static AESUtil getInstance() {
if (instance == null) {
instance = new AESUtil(DEFAULT_KEY_AND_IV);
}
return instance;
}
/**
* @Title:AESUtil
* @Description:自定义偏移量构造AES加密工具,使用默认的KEY
* @param ivParameter 原始偏移量字符串
*/
public AESUtil(String ivParameter) {
iv = new IvParameterSpec(ivParameter.getBytes());
key = new SecretKeySpec(DEFAULT_KEY_AND_IV.getBytes(), ENCRYPTION_ALGORITHM);
} /**
* @Title:AESUtil
* @Description:自定义偏移量和密钥构造AES加密工具
* @param secretKey 原始密钥字符串
* @param ivParameter 原始偏移量字符串
*/
public AESUtil(String secretKey, String ivParameter) {
iv = new IvParameterSpec(ivParameter.getBytes());
key = new SecretKeySpec(secretKey.getBytes(), ENCRYPTION_ALGORITHM);
} /**
* 取得密钥
*
* @throws Exception
*/
public static String getKey() {
Base64 base64 = new Base64();
System.out.println("密钥String:" + new String(key.getEncoded()));
return base64.encodeToString(key.getEncoded());
} /**
* 取得偏移量
*/
public static String getIv() throws Exception {
Base64 base64 = new Base64();
System.out.println("偏移量String:" + new String(iv.getIV()));
return base64.encodeToString(iv.getIV());
}
/**
* @Title: encrypt
* @Description: AES加密
* @param enString 用来加密的明文
* @throws Exception
* @return String 加密后密文
* @author hanzhiyong
* @date 2019-4-26下午3:57:17
*/
public String encrypt(String enString) throws Exception {
Base64 base64 = new Base64();
Cipher cipher = Cipher.getInstance(CIPHER_PARAM);
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encrypted = cipher.doFinal(enString.getBytes("utf-8"));
return base64.encodeToString(encrypted); }
/**
* @Title: decrypt
* @Description: AES解密
* @param deString 用来解密的密文
* @throws Exception
* @return String 解密后的明文
* @author hanzhiyong
* @date 2019-4-26下午3:58:06
*/
public String decrypt(String deString) throws Exception {
try {
Base64 base64 = new Base64();
Cipher cipher = Cipher.getInstance(CIPHER_PARAM);
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] decrypted = base64.decode(deString);
byte[] original = cipher.doFinal(decrypted);
return new String(original, "utf-8");
} catch (Exception ex) {
return null;
}
} /**
* @Title: main
* @Description: 加密解密测试用例
* @param args
* @throws Exception
* @return void
* @author hanzhiyong
* @date 2019-4-23下午6:41:16
*/
@Deprecated
public static void main(String args[]) throws Exception {
String sourceString = "测试用来加密的数据";
System.out.println("sourceString加密前: " + sourceString); System.out.println("=========================单例的加密工具=========================");
System.out.println("base64加密后密钥:" + AESUtil.getInstance().getKey());
System.out.println("base64加密后偏移量:" + AESUtil.getInstance().getIv());
System.out.println("加密后sourceString: " + AESUtil.getInstance().encrypt(sourceString));
System.out.println("解密后sourceString: " + AESUtil.getInstance().decrypt(AESUtil.getInstance().encrypt(sourceString))); AESUtil aesUtil = new AESUtil("0123456789111111");
System.out.println("=========================自定义偏移量的工具=========================");
System.out.println("base64加密后密钥:" + aesUtil.getKey());
System.out.println("base64加密后偏移量:" + aesUtil.getIv());
System.out.println("加密后sourceString: " + aesUtil.encrypt(sourceString));
System.out.println("解密后sourceString: " + aesUtil.decrypt(aesUtil.encrypt(sourceString))); }

带偏移量的AES加密工具的更多相关文章

  1. Java AES 加密工具类

    package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...

  2. Android AES加密工具类实现(基础回顾)

    package com.powercreator.cms.util; import java.security.SecureRandom; import javax.crypto.Cipher; im ...

  3. AES 加密工具类

    /** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化: */public class AESOperator { /* * 加密用的 ...

  4. AES加密工具类(对称加密算法)

    import java.nio.charset.Charset; import java.security.Key; import javax.crypto.Cipher;import javax.c ...

  5. AES加密工具

    public class AES { /** * 加密 * * @param content * 需要加密的内容 * @param password * 加密密码 * @return */ publi ...

  6. AES加密解密工具类封装(AESUtil)

    package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...

  7. 通过Go实现AES加密和解密工具

    本文包含如下两个内容: AES加密介绍及实现原理 Go实现AES加密和解密工具 AES加密介绍及实现原理 AES( advanced encryption standard)使用相同密钥进行加密和解密 ...

  8. Jmeter参数的AES加密使用

    在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况.以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时候,怎样发 ...

  9. AES采用CBC模式128bit加密工具类

    写在前面 安全测试ECB模式过于简单需要改为CBC模式加密以下为工具类及测试 AESUtils.java package com.sgcc.mobile.utils; import sun.misc. ...

随机推荐

  1. BZOJ3926:[ZJOI2015]诸神眷顾的幻想乡(广义SAM)

    Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...

  2. 32、SpringBoot-整合Dubbo

    分布式应用 在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring, Spring Boot+Spring Cloud. 分布式系统: Zook ...

  3. nginx下配置多个web服务

    参考 nginx配置详解  nginx反向代理与负载均衡详解 一.nginx简介: Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能 ...

  4. js判断字符长度 汉字算两个字符

    方法一:使用正则表达式,代码如下: function getByteLen(val) { var len = 0; for (var i = 0; i < val.length; i++) { ...

  5. 推荐一个配置linux服务的网站

    该网站的各种linux服务的配置都是基于CentOS系统的 基本上各种linux服务都有了 http://www.server-world.info/en/

  6. Gradle Goodness: Parse Files with SimpleTemplateEngine in Copy Task

    With the copy task of Gradle we can copy files that are parsed by Groovy's SimpleTemplateEngine. Thi ...

  7. Linux---关闭Elasticsearch进程,并重新启动

    有时候,当我们启动elasticsearch之后, 经过很长一段时间没有操作, 自己已经忘了是否已经启动了elasticsearch, 这时候我们可以通过下面的方式验证是否启动,并重新启动: step ...

  8. (Les16 执行数据库恢复)-重做日志文件恢复

    丢失重做日志文件         丢失了重做日志文件组中的某个成员,并且组中至少还有一个成员:             -不会影响实例的正常操作.             -预警日志中会收到一条信息, ...

  9. No MyBatis mapper was found in '[com.wuji.springboot]' package. Please check your configuration

    No MyBatis mapper was found in '[com.wuji.springboot]' package. Please check your configuration. 这个原 ...

  10. 在angular7中创建组件/自定义指令/管道

    在angular7中创建组件/自定义指令/管道 组件 使用命令创建组件 创建组件的命令:ng generate component 组件名 生成的组件组成: 组件名.html .组件名.ts.组件名. ...