带偏移量的AES加密工具
自定义的一个对称加密工具类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加密工具的更多相关文章
- Java AES 加密工具类
package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...
- Android AES加密工具类实现(基础回顾)
package com.powercreator.cms.util; import java.security.SecureRandom; import javax.crypto.Cipher; im ...
- AES 加密工具类
/** * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化: */public class AESOperator { /* * 加密用的 ...
- AES加密工具类(对称加密算法)
import java.nio.charset.Charset; import java.security.Key; import javax.crypto.Cipher;import javax.c ...
- AES加密工具
public class AES { /** * 加密 * * @param content * 需要加密的内容 * @param password * 加密密码 * @return */ publi ...
- AES加密解密工具类封装(AESUtil)
package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...
- 通过Go实现AES加密和解密工具
本文包含如下两个内容: AES加密介绍及实现原理 Go实现AES加密和解密工具 AES加密介绍及实现原理 AES( advanced encryption standard)使用相同密钥进行加密和解密 ...
- Jmeter参数的AES加密使用
在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况.以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时候,怎样发 ...
- AES采用CBC模式128bit加密工具类
写在前面 安全测试ECB模式过于简单需要改为CBC模式加密以下为工具类及测试 AESUtils.java package com.sgcc.mobile.utils; import sun.misc. ...
随机推荐
- Python 多线程 start()和run()方法的区别(三)
上一篇文章最后只是简单介绍了start()方法和run()方法,这篇文章再详细地看下start()和run()的区别. 在实例调用的函数中加入打印当前线程的名字,分别用start()方法和run()方 ...
- C#流概述
C#流概述 .NET Framework使用“流”来支持读取或写入文件.可以将流视为一组连续的一维数据,包含开头和结尾,并且其中的游标指示了流的当前位置. 1.流操作 流中包含的数据可能来自内存.文件 ...
- 查看rpm包里面内容以及里面文件的内容
如果想查看rpm包里面的内容使用命令: rpm -qpl xxxx.rpm 如果想查看rpm包里面的内容导出,而不是安装,使用命令: rpm2cpio xxxx.rpm | cpio -ivd 就 ...
- SDOI2018一轮NOI培训 题目整理
\(qwq\)首先,这些题对于我而言--类似于\(emmm\)洪水猛兽 \(\mathcal{Day \ \ 1}\) T1 \(\mathcal{\color{red}{Description}}\ ...
- c#中的结构
1.在c#中,结构是值类型的数据结构,它可以使用一个单一的变量存储各种数据类型的相关数据,使用Struct关键字进行声明. 2.C#中结构的特点: (1)结构中可以有字段,属性,方法,运算表达式,事件 ...
- centos6.4 安装code::blocks
今天下午闲着没事尝试在自己的PC中的CentOS上装一个Code::Blocks,因为是Linux菜鸟折腾了一下午才基本算搞定但依然有疑惑: 在网上各种谷哥度娘最后才发现还是官方的文档最靠谱:看这里. ...
- Powerdesigner设置表字段注释与name相同
Powerdesigner设置当表字段注释为空时与name相同 1.在Database-->edit Current DBMS-->script-->objects-->col ...
- Apache安装排错
今天安装一下Apache,发现报错,且在网上没有找到相关解决方法,所以记录一下 安装步骤:将下载好的apache包放置到要放置的目录中,最好是盘根目录下,然后命令行下进入到apache下面的bin目录 ...
- TCP中的三次握手和四次挥手
三次握手:目的是同步连接双方的序列号和确认号 并交换 TCP窗口大小信息. 理论上跟通话一样: a: 你听的到吗? b: 我能听到.只需要两次就可以了,但建立连接阶段不是双向即时通信的,且最终的目的 ...
- Linux 三剑客之sed命令总结
sed ### sed ### .关键字取行 sed -n '/jpinsz/p' test.txt sed -n '/^d/p' test.txt .根据行数取行 sed -n '2,5p' tes ...