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. sql中with as的用法练习

    在工作中经常看到有人使用with as,查询很顺畅,也很快,很好奇,在网上也有不少资料,看了大神的文章,也练习一下. 首先给出两位位大神文章的链接,介绍十分详细:http://www.cnblogs. ...

  2. C# 自定义集合

    自定义类型 public class Product { public int Id { get; set; } // 自增ID public string Name { get; set; } // ...

  3. Hashset,Iterator

    HashSet类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. (一)HashSet的一些特性如下: 1.HashSet中的值不能重复 ...

  4. [第四版]用getaddrinfo设置tcp基本连接属性

    getaddrinfo getaddrinfo的一个重要功能, 很方便的构造struct sockaddr_in对象, 把繁琐的构造过程隐藏起来 getaddrinfo兼有gethostbyname和 ...

  5. ubuntu server获取并自动设置最快镜像的方法

    一,安装方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了临时源,这样移除 ...

  6. OSGi之Bundle

    OSGi提出的根源是什么?在我看来就是对JVM的类加载机制进行了扩展,添加了一系列的规则,使得原有的类包(Class Package)扩展到类域(Class Domain).然后是建立在类域上的一系列 ...

  7. Linux下安装MySQLdb模块

    1,查看是否已安装MySQLdb模块 进入python的命令行,输入 import MySQLdb 如果没有报错,证明此模块已经安装,可以跳过以下步骤. 2,下载最新的MySQLdb安装包: wget ...

  8. snmp4j 编程

    从www.snmp4j.org下载snmp4j的jar包,用eclipse新建一个java项目.将jar包导入工程(只有一个jar包),开始编程 一个简单的测试程序 //create target / ...

  9. 如何在Report Builder中使用fnd_profile.value

    在EBS的Report开发中,需要根据客户化的一个Profile来控制用户可以访问的数据,可是在开发的过程中发现一直取不到该Profile的值,后来百度才找到了原因. 解决方法: 1.添加用户参数p_ ...

  10. 通过HTML5实现发送声音

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...