主要代码如下:

importjava.security.Security;

importjavax.crypto.Cipher;

importjavax.crypto.spec.SecretKeySpec;

importorg.bouncycastle.jce.provider.BouncyCastleProvider;

publicclassEncrypt {

publicstaticbooleaninitialized =false;

publicstaticfinalString ALGORITHM ="AES/ECB/PKCS7Padding";

/**

* @param  String str  要被加密的字符串

* @param  byte[] key  加/解密要用的长度为32的字节数组(256位)密钥

* @return byte[]  加密后的字节数组

*/

publicstaticbyte[] Aes256Encode(String str,byte[] key){

initialize();

byte[] result =null;

try{

Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");

SecretKeySpec keySpec = newSecretKeySpec(key,"AES");//生成加密解密需要的Key

cipher.init(Cipher.ENCRYPT_MODE, keySpec);

result = cipher.doFinal(str.getBytes("UTF-8"));

}catch(Exception e){

e.printStackTrace();

}

returnresult;

}

/**

* @param  byte[] bytes  要被解密的字节数组

* @param  byte[] key    加/解密要用的长度为32的字节数组(256位)密钥

* @return String  解密后的字符串

*/

publicstaticString Aes256Decode(byte[] bytes,byte[] key){

initialize();

String result = null;

try{

Cipher cipher = Cipher.getInstance(ALGORITHM, "BC");

SecretKeySpec keySpec = newSecretKeySpec(key,"AES");//生成加密解密需要的Key

cipher.init(Cipher.DECRYPT_MODE, keySpec);

byte[] decoded = cipher.doFinal(bytes);

result = newString(decoded,"UTF-8");

}catch(Exception e){

e.printStackTrace();

}

returnresult;

}

publicstaticvoidinitialize(){

if(initialized)return;

Security.addProvider(newBouncyCastleProvider());

initialized = true;

}

}

可以看到,代码开头要先import Java Cryptography Extension (JCE)中的两个类——加/解密类Cipher和密钥类SecretKeySpec,以及BouncyCastle的一个开源加/解密类库中的加/解密算法提供者类BouncyCastleProvider。

PC上的Java里面只有"AES/ECB/PKCS5Padding"算法,没有"AES/ECB/PKCS7Padding"算法。故需要引入BouncyCastle的库,并给Cipher.getInstance方法传入参数"BC"来指定Java使用这个库里的加/解密算法。BouncyCastle的加/解密类库的下载地址:http://www.bouncycastle.org/latest_releases.html

在这段代码可以运行之前,还有一个问题需要解决。Java本身限制密钥的长度最多128位,而AES256需要的密钥长度是256位,因此需要到Java官网上下载一个Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。在Java

SE的下载页面下面的Additional Resources那里会有下载链接。下载后打开压缩包,里面有两个jar文件。把这两个jar文件解压到JRE目录下的lib/security文件夹,覆盖原来的文件。这样Java就不再限制密钥的长度了。

aes256 java_用Java进行AES256相关推荐

  1. 【AES256】Java实现AES256加解密

    AES256加解密比较常见,这里简单记录以供参考! 一.下载 官方JDK默认支持AES-128,在 1.8.0_151 和 1.8.0_152 版本之前,需要从Oracle官网下载安全JAR包方可支持 ...

  2. aes 256 cbc java,AES256加解密java语言实现

    AES256加解密java语言实现 写在前面 基于项目安全性需要,有时候我们的项目会使用AES 256加解密算法.以下,是针对实现AES256 Padding7加密算法实现的关键步骤解析以及此过程遇到 ...

  3. aes256加密java_使用Java和JCEKS进行AES-256加密

    aes256加密java 总览 由于最近爱德华·斯诺登 ( Edward Snowden)发布了文件,以及针对JC Penny , Sony和Target等在线商业商店的黑客攻击激增,安全性已成为近年 ...

  4. java aes256 加密_JAVA中使用AES256加密

    前言:java默认支持128位加密规范,如果想支持256位加密规范,就需要使用无限制JCE策略文件,而现在Android端AES256的加密填充方式一般是PKCS7Padding,JAVA支持PKCS ...

  5. java使用AES256解密

    网上关于java用AES加密解密的文章有很多,我这里只用到解密(加密是服务器那边做^_^),所以更简洁一些: public class AES256Utils {private static fina ...

  6. 搭建java_搭建java开发环境

    ① 第一步.下载jdk安装包. jdk官方下载网址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...

  7. 深入java_深入Java Final

    JAVA关键字final用于修饰数据.方法或类,通常意味着"无法改变的",既数据不能改变,方法不能覆盖,类不能继承.一般采用final有两种原因:设计和效率.而随着JAVA版本的更 ...

  8. 圆通招java_圆通java程序员面试经验|面试题 - 职朋职业圈

    面试过程: 你所写的经历项目涉及到的东西,你在项目中的职责开发了哪部分:结构体对齐相关问题,怎样避免死锁,怎样在数据库添加成员 序列化 守护进程 JAVA的垃圾回收机制然后深入探讨了下这个 I+1其他 ...

  9. cloning java_深入浅出Java中的clone克隆方法,写得太棒了!

    作者:张纪刚 blog.csdn.net/zhangjg_blog/article/details/18369201/ 2019-03-24 10:33:04 Java中对象的创建 clone 顾名思 ...

最新文章

  1. 图灵赠书——程序员12月书讯
  2. iOS-APP提交上架流程(新手必看!2016年3月1日最新版)
  3. CISCO ACL的匹配数问题
  4. 深度学习核心技术精讲100篇(五十七)- 自动驾驶车会看地图吗?它是如何认路、找准定位的?
  5. useradd -g mysql mysql_Linux —— useradd -g mysql mysql解析及useradd详解
  6. Eclipse is running in a JRE, but a JDK is required错误的解决
  7. 【绝对有用】Server Tomcat v9.0 Server at localhost failed to start
  8. mysql存储过程执行报错1175_mysql 数据库 存储过程执行报错的解决办法
  9. Python+OpenCV:图像去噪(Image Denoising)
  10. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面
  11. python 基础语法梳理
  12. java实现5 4 3 2 1递归_递归及递归的使用
  13. 禅道的下载和安装教程(Linux版)
  14. 活跃在全球顶级会议的阿里新生代白帽:能挖漏洞会做焊工
  15. Vision Transformer(VIT)代码分析——保姆级教程
  16. linux可视化界面黑屏,Fedora 14 不能进入图形界面 显示黑屏的解决办法
  17. Python中的进程池
  18. 计算机连接游戏手柄,电脑如何使用手柄_电脑怎么连手柄打游戏-系统城
  19. 有道云笔记的Markdown渲染太慢
  20. .pyc是什么?python

热门文章

  1. js通过URL下载服务器文件(可行方法)
  2. openCV中meanshift算法查找目标
  3. IDEA2017安装actibpmn插件中文乱码问题解决
  4. 服装企业生产管理体现
  5. UE4官方的Python插件(Python Editor Script Plugin)
  6. React的生命周期(面试必问)
  7. 帷幕灌浆资料怎么做_您知道灌浆和转堆的区别吗
  8. 基于RBAC权限管理实现的中小学成绩管理系统
  9. unity shader smoothstep and lerp ,InverseLerp
  10. Ubuntu 16.04 + Kinect for Xbox one(v2)驱动安装