带偏移量的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. ...
随机推荐
- Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败解决方案
即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的w ...
- Odoo中的约束
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280735.html 一:装饰器约束(字段约束) 装饰器参数指定了约束的字段,当涉及的字段中任一发生改变时触发 ...
- WEB安全 php+mysql5注入防御(一)
注入利用函数: concat()函数将多个字符串连接成一个字符串 database() 当前数据库,用途:获取数据 version() 数据库版本,用途:利用版本特性,如5.0版本下的informat ...
- HDU 1208 跳格子题(很经典,可以有很多变形)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1208 Pascal's Travels Time Limit: 2000/1000 MS (Java ...
- 更换php工具箱出现问题 CI框架的问题 【问题解决】
2018/10/08 09:56:47 [error] 8472#8588: *1 FastCGI sent in stderr: "PHP Warning: Unknown: open_ ...
- WebSocket的原理,以及和Http的关系 (转载)
一.WebSocket是HTML5中的协议,支持持久连接:而Http协议不支持持久连接. 首先HTMl5指的是一系列新的API,或者说新规范,新技术.WebSocket是HTML5中新协议.新API. ...
- node.js中用户密码的加密
crypro实现用户密码的加密 在实际的项目中,只要涉及到用户的信息,就是十分重要的.设想一下数据库里面存放的用户的密码是明文的形式,后果是有多严重.所以今天给大家分享一下express中怎样实现用户 ...
- Vector/Push_back
https://bbs.csdn.net/topics/370225285 https://blog.csdn.net/u013630349/article/details/46853297 http ...
- mysql 常用的时间日期函数小结
本文主要是总结一些常用的在实际运用中常用的一些mysql时间日期以及转换的函数 1.now() :返回当前日期和时间 select now(); //2018-04-21 09:19:21 2.cu ...
- Python -- Effective Python:编写高质量Python代码的59个有效方法
第 1 章 用 Pythonic 方式来思考 第 1 条:确认自己所用的 Python 版本 python --version import sys print(sys.version_info) p ...