自定义的一个对称加密工具类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. 随手练——HDU-2037 、P-2920 时间安排(贪心)

    普通时间安排 HDU-2037 :http://acm.hdu.edu.cn/showproblem.php?pid=2037 选取结束时间早的策略. #include <iostream> ...

  2. J2EE从下载到配置成功

    1,首先在www.oracle.com网站下载JDK 2 3 4,可以根据自己的需要下载相应的JDK 5,在安装的过程中要将JDK的安装路径和JRE的安装路径安装在不同文件夹中以示区别,例如 6,配置 ...

  3. 【转】 Tomcat+redis+nginx配置

    为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...

  4. PAT——1033. 旧键盘打字

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以及应该输入的文 ...

  5. IIS - 虚拟目录与应用程序的异同

    在Windows 7 IIS7中,对服务器建立站点后,有二种添加子站点的方式 A. 虚拟目录 B. 应用程序   简单总结下二者之间的异同 A.虚拟目录     虚拟目录是指在站点下建立一个虚拟子目录 ...

  6. 离线服务器下docker的部署与应用

    一分钟内形成docker的模糊概念 网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机 ...

  7. docker 导出导入

    容器导出 docker export -o myname.tar 容器id 容器导人 docker import myname.tar httpd:v1

  8. 修改 Hue 默认数据库

    Hue 更改默认数据 1. 需要安装 mysql 一下包 mysql-server mysql-devel mysql-shared mysql-client mysql-python shared ...

  9. C++构造函数及成员变量

    class MyClass { public: int m_age; float m_hight; MyClass() { } ~MyClass() { } MyClass(int age, floa ...

  10. Linux常用到的一些命令

    1.poweroff 关闭系统(1) 2.halt 关闭系统(2) 3.reboot 重启系统 4.pwd 查看当前所在目录的绝对路径 5.mkdir 文件名 创建一个目录文件 6.rm 文件名 删除 ...