import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; /**AES 是一种可逆加密算法,对用户的敏感信息加密处理
* 对原始数据进行AES加密后,在进行Base64编码转化;
*/
public class AESOperator {
/*
* 加密用的Key 可以用26个字母和数字组成
* 此处使用AES-128-CBC加密模式,key需要为16位。
*/
private String sKey=”0123456789abcdef”;
private String ivParameter=”0123456789abcdef”;
private static AESOperator instance=null;
private AESOperator(){ }
public static AESOperator getInstance(){
if (instance==null)
instance= new AESOperator();
return instance;
}
// 加密
public String encrypt(String sSrc) throws Exception {
Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”);
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, “AES”);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes(“utf-8″));
return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码。
} // 解密
public String decrypt(String sSrc) throws Exception {
try {
byte[] raw = sKey.getBytes(“ASCII”);
SecretKeySpec skeySpec = new SecretKeySpec(raw, “AES”);
Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original,”utf-8″);
return originalString;
} catch (Exception ex) {
return null;
}
} public static void main(String[] args) throws Exception {
// 需要加密的字串
String cSrc = “我来自www.wenhq.com”;
System.out.println(cSrc);
// 加密
long lStart = System.currentTimeMillis();
String enString = AESOperator.getInstance().encrypt(cSrc);
System.out.println(“加密后的字串是:” + enString); long lUseTime = System.currentTimeMillis() – lStart;
System.out.println(“加密耗时:” + lUseTime + “毫秒”);
// 解密
lStart = System.currentTimeMillis();
String DeString = AESOperator.getInstance().decrypt(enString);
System.out.println(“解密后的字串是:” + DeString);
lUseTime = System.currentTimeMillis() – lStart;
System.out.println(“解密耗时:” + lUseTime + “毫秒”);
}
} No related posts.

经过验证,可行。

不过在使用过程中sun.misc.BASE64Encoder找不到jar包的解决方法

解决方案1(推荐): 
只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。 
解决方案2: 
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

最新文章

  1. 《InsideUE4》-7-GamePlay架构(六)PlayerController和AIController
  2. Xcode 证书问题报错锦集
  3. 使用Ready2Search来定制Firefox和Chrome的搜索框
  4. linux的终端,网络虚拟终端,伪终端(转)
  5. 我学C的那些年[ch01]:浅淡C语言的编译过程
  6. 最短路径Shortest Path algorithm
  7. 十二月总结-and-2016年终总结
  8. 【LeetCode】233. Number of Digit One
  9. 线性规划与网络流24题●09方格取数问题&13星际转移问题
  10. sping框架纯注解配置
  11. cf- Educational Codeforces Round 40 -D
  12. 多网卡环境下Eureka服务注册IP选择问题
  13. C#清除HTML样式
  14. MySQL Replication(Master与Slave基本原理及配置)
  15. Java多线程编程中Future模式的详解<转>
  16. <NET CLR via c# 第4版>笔记 第17章 委托
  17. kafka不停止服务的情况下修改日志保留时间
  18. 分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC (转载 不错)
  19. IIS8如何安装和使用URL重写工具-URL Rewrite
  20. Vue动画效果

热门文章

  1. 【Xamarin笔记】Events, Protocols and Delegates
  2. Linux常用命令-入门
  3. 数据库MySql阶段总结
  4. ubuntu下各个软件完全卸载
  5. JS基础语法
  6. Apache与Tomcat 区别联系(转)
  7. 用GitLab搭建自己的私有GitHub
  8. 文件对比工具Beyond Compare使用方法
  9. iOS 键盘隐藏
  10. freebsd 禁用root登录ssh并给普通用户登录权限