import java.math.BigDecimal;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import org.codehaus.jettison.json.JSONObject; import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; /**
* AES对称加密和解密,有偏移量
* @author tyg
* @date 2018年6月28日下午12:48:01
*/
@SuppressWarnings("restriction")
public class AESUtils { // 密匙
private static final String KEY = "f4k9f5w7f8g4er26";
// 偏移量
private static final String OFFSET = "5e8y6w45ju8w9jq8";
// 编码
private static final String ENCODING = "UTF-8";
//算法
private static final String ALGORITHM = "AES";
// 默认的加密算法
private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; /**
* 加密
* @param data
* @return
* @throws Exception
* @return String
* @author tyg
* @date 2018年6月28日下午2:50:35
*/
public static String encrypt(String data) throws Exception {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(OFFSET.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(data.getBytes(ENCODING));
return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。
} /**
* 解密
* @param data
* @return
* @throws Exception
* @return String
* @author tyg
* @date 2018年6月28日下午2:50:43
*/
public static String decrypt(String data) throws Exception {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes("ASCII"), ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(OFFSET.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] buffer = new BASE64Decoder().decodeBuffer(data);
byte[] encrypted = cipher.doFinal(buffer);
return new String(encrypted, ENCODING);//此处使用BASE64做转码。
}

最新文章

  1. App解读
  2. AIX 环境下Telnet返回提示所有端口已经被占用,处理方法
  3. Tomcat部署记事
  4. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 5 The accuracy of simple random samples
  5. BUAA & ICT 夏令营之旅
  6. android下面res目录
  7. crontab 配置
  8. 常用cl命令参数解释
  9. iOS 最新App提交上架流程及部分问题的解决方案2016.12.21,感谢原博主!!!
  10. Cf #353 D. Tree Construction
  11. LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
  12. Linux高性能server编程——信号及应用
  13. PHP csv文件内容转成数组/Json
  14. Mysql insert语句的优化
  15. Python 基础【二】 上
  16. 【消息中间件之RabbitMQ学习】-开篇-001
  17. Dijkstra(迪杰斯特拉)算法求解最短路径
  18. C 标准库 - string.h之strstr使用
  19. "Generative Adversarial Nets" Notes
  20. mysql语句, 空的 order by , 空的 where

热门文章

  1. 基于三层架构下的公共数据访问方法(Sqlite数据库)
  2. 该 URL“XX”无效。它可能指向不存在的文件或文件夹,或者是指向不在当前网站中的有效文件或文件夹
  3. v模拟器(华为、H3C)点滴
  4. Nodejs搭建基于express的应用,使用脚手架工具--express-generator
  5. [Oracle][DATAGUARD] 关于确认PHYSICAL STANDBY的同期状况的方法
  6. 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
  7. angular.js 渲染
  8. docker学习端口连接docker容器---第四章节
  9. Python基础学习---比较运算符
  10. 更强大的python正则表达式模块 -- regex