package com.singlee.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.net.util.Base64; /** * AES工具类 * * <pre> * 因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件。 * 替换的文件:%JDK_HOME%\jre\lib\security\local_policy.jar * 参考: http://czj4451.iteye.com/blog/1986483 */ public class AESUtil { // 密钥 public static String key = "AD42F6697B035B7580E4FEF93BE20BAD"; private static String charset = "utf-8"; // 偏移量 private static int offset = 16; private static String transformation = "AES/CBC/PKCS5Padding"; private static String algorithm = "AES"; /** * 加密 * * @param content * @return */ public static String encrypt(String content) { return encrypt(content, key); } /** * 解密 * * @param content * @return */ public static String decrypt(String content) { return decrypt(content, key); } /** * 加密 * * @param content * 需要加密的内容 * @param key * 加密密码 * @return */ public static String encrypt(String content, String key) { try { SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset); Cipher cipher = Cipher.getInstance(transformation); byte[] byteContent = content.getBytes(charset); cipher.init(Cipher.ENCRYPT_MODE, skey, iv);// 初始化 byte[] result = cipher.doFinal(byteContent); return new Base64().encodeToString(result); // 加密 } catch (Exception e) { LogUtil.exception(e); } return null; } /** * AES(256)解密 * * @param content * 待解密内容 * @param key * 解密密钥 * @return 解密之后 * @throws Exception */ public static String decrypt(String content, String key) { try { SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm); IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset); Cipher cipher = Cipher.getInstance(transformation); cipher.init(Cipher.DECRYPT_MODE, skey, iv);// 初始化 byte[] result = cipher.doFinal(new Base64().decode(content)); return new String(result); // 解密 } catch (Exception e) { LogUtil.exception(e); } return null; } public static void main(String[] args) throws Exception { String s = "hello world"; // 加密 System.out.println("加密前:" + s); String encryptResultStr = encrypt(s); System.out.println("加密后:" + encryptResultStr); // 解密 System.out.println("解密后:" + decrypt(encryptResultStr)); } }
注:加解密只需替换 %JDK_HOME%\jre\lib\security\local_policy.jar 即可(注意备份)
附件:java1.7的策略文件
其他java版本请参考: http://czj4451.iteye.com/blog/1986483
相关推荐
NULL 博文链接:https://ping2010.iteye.com/blog/1571524
AESUtil AES的加密和解密java工具类 aes解密 aes加密 KeyGenerator kgen = KeyGenerator.getInstance("AES"); kgen.init(128); Cipher cipher = Cipher.getInstance(ALGORITHMSTR); //"算法/模式/补码方式" ...
java中aes加密解密工具类
JAVA AES加密和解密的工具类。 这个AES加密可用于Android,和java端俩种情况。
主要介绍了java使用Hex编码解码实现Aes加密解密功能,结合完整实例形式分析了Aes加密解密功能的定义与使用方法,需要的朋友可以参考下
c/c++与java互通 AES加密解密; 只使用基本char,数组运算实现加密算法;不依赖其它加密lib
压缩包里有两个工程,一个vc6.0一个myeclipse,本帖是修复贴,原帖地址c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING http://download.csdn.net/download/wangsonghiweed/4328267 -来自CSDN,有童鞋反映有...
* 编码工具类 * 1.将byte[]转为各种进制的字符串 * 2.base 64 encode * 3.base 64 decode * 4.获取byte[]的md5值 * 5.获取字符串md5值 * 6.结合base64实现md5加密 * 7.AES加密 * 8.AES加密为base 64...
aes加密解密工具类,解决在linux服务加密解密异常问题。
JAVA AES对称加密工具类,可实用;包含加密字符串和文件流
Swift 实现的 RSA, AES 加密解密工具类.zip,rsa公钥/私钥生成,rsa,aes加密/解密,rsa sign/verify in swift with commoncrypto in ios and os x
简单实现了AES ECB加密方式,带密码的加、解密运算,加载文本文件、保存文本文件。
支持密码长度AES_128/AES_192/AES_256,支持工作模式 ECB/CBC,支持填充模式 ZERO/PKCS7/ISO。已通过测试。内附使用方法。
包含前端aes加密解密工具类,使用指定秘钥加密。后台java使用的工具类
封装POST请求和 AES加密解密的代码,可以作为工具类直接引用,封装POST请求和 AES加密解密的代码,可以作为工具类直接引用
综合网上的AES加密,把其做成一个工具类,方便加密解密的实现
Java文件加解密工具类,使用AES算法,256位秘钥。srcFile为输入文件,destFile为输出文件。
AES自定义16位字符串我加密字密码
AES加密解密工具类,解决windows下和linux加密解密不同问题。