AES算法Java实现浅析
来源:互联网 发布:淘宝卫龙旗舰店 编辑:程序博客网 时间:2024/05/17 23:01
Java jce对aes算法有很好的支持,但是默认安装的JDK或者JRE是不能支持aes192bit密钥和aes256bit密钥两种算法的,需要到sun官方下载Java(TM) Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files,以下是jce unilimited strength jurisdiction policy files 6的官方下载地址:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer
下载后解压文件,将里面的文件拷贝到
<java-home>/lib/security [Unix]
<java-home>/lib/security [Win32]
覆盖原先的jar文件,请先备份原先的jar文件,以防你需要恢复密钥长度的限制,这里需要注意的是如果是安装的jdk,jdk目录中的jre下面的lib/security下的文件也需要覆盖。完成这个步骤之后就可以使用不限制密钥长度的aes算法了,简单的实现代码如下:
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(192); // 192 and 256 bits also available,这一步是否有安装jce unlimited strength jurisdiction policy files 都不会出现异常
Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);//这一步如果没有安装jce unlimited strength jurisdiction policy files,并且使用了192bits和256bits的密钥的话就会抛出java.security.InvalidKeyException:Invalid AES key length
byte[] output = cipher.doFinal(seed);//seed是一个byte[];
最后讲下aes算法是块加密运算的,单位块大小为16bytes,所以输入的byte[]如果不是16的倍数就填充至16的倍数,然后aes算法的密文结构就是aes对每一个块(16bytes)的明文加密的密文的拼串。比如aes128加密16bytes的byte[]a得到16bytes的密文a,加密16bytes的byte[]b得到16bytes的密文b,这样我们构建一个32bytes的byte[]c,前16bytes数据来自copy至a,后16bytes数据copy至b,这样将c输入aes128加密将得到一个32bytes的密文,并且就是之前的密文a和密文b的顺序拼串,以上都是nopadding模式下的情况。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-02/53103.htm
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer
下载后解压文件,将里面的文件拷贝到
<java-home>/lib/security [Unix]
<java-home>/lib/security [Win32]
覆盖原先的jar文件,请先备份原先的jar文件,以防你需要恢复密钥长度的限制,这里需要注意的是如果是安装的jdk,jdk目录中的jre下面的lib/security下的文件也需要覆盖。完成这个步骤之后就可以使用不限制密钥长度的aes算法了,简单的实现代码如下:
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(192); // 192 and 256 bits also available,这一步是否有安装jce unlimited strength jurisdiction policy files 都不会出现异常
Generate the secret key specs.
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);//这一步如果没有安装jce unlimited strength jurisdiction policy files,并且使用了192bits和256bits的密钥的话就会抛出java.security.InvalidKeyException:Invalid AES key length
byte[] output = cipher.doFinal(seed);//seed是一个byte[];
最后讲下aes算法是块加密运算的,单位块大小为16bytes,所以输入的byte[]如果不是16的倍数就填充至16的倍数,然后aes算法的密文结构就是aes对每一个块(16bytes)的明文加密的密文的拼串。比如aes128加密16bytes的byte[]a得到16bytes的密文a,加密16bytes的byte[]b得到16bytes的密文b,这样我们构建一个32bytes的byte[]c,前16bytes数据来自copy至a,后16bytes数据copy至b,这样将c输入aes128加密将得到一个32bytes的密文,并且就是之前的密文a和密文b的顺序拼串,以上都是nopadding模式下的情况。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-02/53103.htm
0 0
- AES算法java实现浅析
- AES算法Java实现浅析
- java实现AES算法
- AES算法 Java实现
- AES算法的JAVA实现
- AES算法加密java实现
- 【JAVA】AES算法的java实现
- AES加密解密算法的Java实现
- 用java实现AES加解密算法
- AES算法实现_加密 JAVA
- AES加密解密算法Java实现
- AES算法,DES算法,RSA算法JAVA实现
- 【转】AES算法实现
- C++实现AES算法
- C++实现AES算法
- C# 实现AES算法
- AES算法实现分析
- python实现AES算法
- UITextView如何把文字显示到最后一行
- android 电容屏(二):驱动调试之基本概念篇
- 修改linux hostname
- type=image和type=submit的区别
- Eclipse快捷键大全(转载)
- AES算法Java实现浅析
- const指针解引
- 《Javascript高级教程(中文版)》(chm)计算机电子书下载
- 批量修改 wordpress 标题 和对应的 slug (post_title,post_name): sanitize_title($title);生成slug
- CF —— IQ Test
- DY2100在线代理-网站代理-网页代理
- 新浪微博开发平台接入流程(2)---SDK Demo
- dict使用详解
- 逻辑回归关于经验风险最小化的凸近似体现