package testJava.java;

import java.security.SecureRandom;
import java.util.Base64; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; /**
* @Author xx
* @Date 2014年3月26日
* @Comments (美国软件出口限制,AES算法,秘钥长度大于128位时需替换对应jdk版本的policy文件: ${java_home}/jre/lib/security/local_policy.jar 和 ${java_home}/jre/lib/security/US_export_policy.jar)
*/
public class AESEncrypter {
private static final String ENCODEING = "UTF-8";
private static final String ALGORITHM = "AES";
private static final String KEY = "2016aes"; private static Cipher cipher_encrypt = null;//加密密码器
private static Cipher cipher_decrypt = null;//解密密码器 static{
try {
KeyGenerator kgen = KeyGenerator.getInstance(ALGORITHM);
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(KEY.getBytes());
kgen.init(128, secureRandom);
//kgen.init(256, secureRandom);//256位长度秘钥
SecretKey secretKey = kgen.generateKey();
byte[] secretKeyEncoded = secretKey.getEncoded();
SecretKeySpec sks = new SecretKeySpec(secretKeyEncoded, ALGORITHM);
cipher_encrypt = Cipher.getInstance(ALGORITHM);
cipher_encrypt.init(Cipher.ENCRYPT_MODE, sks);
cipher_decrypt = Cipher.getInstance(ALGORITHM);
cipher_decrypt.init(Cipher.DECRYPT_MODE, sks);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 加密
* @param content 需要加密的内容
* @return
*/
public static String encrypt(String content) throws Exception{
byte[] result = cipher_encrypt.doFinal(content.getBytes(ENCODEING));
// return Base64.encodeBase64String(result);
return new String(Base64.getEncoder().encode(result));
} /**
* 解密
* @param content
* @return
* @throws Exception
*/
public static String decrypt(String content) throws Exception {
byte[] result = cipher_decrypt.doFinal(Base64.getDecoder().decode(content));
// byte[] result = cipher_decrypt.doFinal(Base64.decodeBase64(content));
return new String(result,ENCODEING);
} /**
* 对字符串数组里的字符串加密
* @param content
* @return
* @throws Exception
*/
public static String[] encryptStrArray(String ...content) throws Exception{
for (int i = 0; i < content.length; i++) {
byte[] result = cipher_encrypt.doFinal(content[i].getBytes(ENCODEING));
// String encryptedStr = Base64.encodeBase64String(result);
String encryptedStr = new String(Base64.getEncoder().encode(result));
content[i] = encryptedStr;
}
return content;
} public static void main(String[] args) throws Exception {
String content = "公布修改五部法律"; //加密
System.out.println("加密前:" + content);
String codeStr = encrypt(content);
System.out.println("加密后:" + codeStr);
System.out.println("加密后 length:" + codeStr.getBytes("UTF-8").length);
//解密
String decryptResult = decrypt(codeStr);
System.out.println("解密后:" + decryptResult); System.out.println("done!");
}
/**
* 加密前:公布修改五部法律
加密后:B2Pu0KBO/FGuttUxSpT9/544jgp4OEoL8L4o4N85a0I=
加密后 length:44
解密后:公布修改五部法律
done!
*/ }

AESEncrypter加密算法代码示例的更多相关文章

  1. 高级渲染技巧和代码示例 GPU Pro 7

    下载代码示例 移动设备正呈现着像素越来越高,屏幕尺寸越来越小的发展趋势. 由于像素着色的能耗非常大,因此 DPI 的增加以及移动设备固有的功耗受限环境为降低像素着色成本带来了巨大的压力. MSAA 有 ...

  2. Java8-Function使用及Groovy闭包的代码示例

    导航 定位 概述 代码示例 Java-Function Groovy闭包 定位 本文适用于想要了解Java8 Function接口编程及闭包表达式的筒鞋. 概述 在实际开发中,常常遇到使用模板模式的场 ...

  3. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  4. SELECT控件操作的JS代码示例

    SELECT控件操作的JS代码示例 1 检测是否有选中 if(objSelect.selectedIndex > -1) { //说明选中 } else { //说明没有选中 } 2.动态创建s ...

  5. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

  6. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  7. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  8. C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例

    Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...

  9. 领域驱动开发推荐代码示例 — Microsoft NLayerApp

    简介: Microsoft NLayerApp是由微软西班牙团队出品的基于.NET 4.0的“面向领域N层分布式架构”代码示例,在codeplex上的地址是:http://microsoftnlaye ...

随机推荐

  1. Python脚本控制的WebDriver 常用操作 <六> 打印当前页面的title及url

    下面将使用WebDriver来答应浏览器页面的title和访问的地址信息 测试用例场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例: 假设1个页面的title应该是'hel ...

  2. R语言的字符串处理

    R语言字符串的拼接 content<-paste("124235","789","124",sep="@") 运行 ...

  3. JavaWeb之 JSP基础

    什么是JSP JSP的全称是java server page, java服务页面.是提供java服务的页面~ 那么和Servlet有什么区别呢?JSP的页面既可以写java代码~也可以写html代码哦 ...

  4. PAT乙级真题1003. 我要通过!(20)(解题)

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...

  5. ThinkPHP3.2.2中开启REWRITE模式

    1. 在项目配置文件(\Application\Common\Conf\config.php)中配置URL模式 <?php return array( //URL模式 , ); 2. 在Thin ...

  6. shelll函数求两个输入数字之和

    #!/bin/bash #This is a test of the addition of the program! function AddFun { read -p "Enter a ...

  7. hdu 4593 Robot

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4593 Robot Description A robot is a mechanical or vir ...

  8. 编写可维护的JavaScript之事件处理

    规则1:隔离应用逻辑 这会让你的代码容易调试 规则2:不要分发事件对象 event对象包含了太多信息 // a good example var handlePopup = { // 事件句柄,处理所 ...

  9. golang的goroutine与channel

    Golang的goroutine是非抢占式的, 令人相当蛋疼! 有痛不能呻吟...只能配合channel在各goroutine之间传递信号来实现抢占式, 而这形成了golang最灵活与最具性能的核心. ...

  10. Qt的QTabelWidget

    QTableWidget的用法总结  http://blog.csdn.net/zb872676223/article/details/39959061 [Qt]在QTableWidget中添加QCh ...