JAVA下AES256加密
2015-07-15 14:43
399 查看
废话不说,上代码
由于一个算法版权问题?AES256会报错,需要把所使用到的jre的两个文件替换掉。目录为jdk1.7.0_79\jre\lib\security下的local_policy.jar和US_export_policy.jar,这两个文件官网上有可以下载,但是我也忘记在哪里了蛤蛤蛤。
完成这个之后还会报错。那就需要添加另外一个jar包bcprov-jdk15on-152.jar(其实这里还有个扩展包bcprov-ext-jdk15on-152.jar,但是我不知道需不需要两个包都放进去才能生效),放在目录jdk1.7.0_79\jre\lib\ext下,另外在jdk1.7.0_79\jre\lib\security\java.security 添加一句
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvide
数字按顺序加入,应该就没问题了。
private String Encode(byte[] x){ String hs = ""; String stmp = ""; for (int n = 0; n < x.length; n++) { stmp = (Integer.toHexString(x & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; // if (n<b.length-1) hs=hs+":"; } return hs.toUpperCase(); } private byte[] Decode(String x){ String str = "0123456789ABCDEF"; int length = x.length() / 2; char[] hexs = x.toCharArray(); byte[] d = new byte[length]; int n; for (int i = 0; i < d.length; i++) { n = str.indexOf(hexs[2 * i]) * 16; n += str.indexOf(hexs[2 * i + 1]); d[i] = (byte) (n & 0xff); } return d; } public String AES256Encrypt(String str,String key){ String rs = null; try { //MD5加密 MessageDigest md5; md5 = MessageDigest.getInstance("MD5"); byte[] keybyte = md5.digest(key.getBytes("UTF8")); //一次SHA256加密 MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); keybyte = sha256.digest(keybyte); //一次AES256加密 //Read more : http://www.ehow.com/info_12201156_java-encryption-aes-256-code.html byte[] strByte = str.getBytes("UTF8"); SecretKeySpec keys = new SecretKeySpec(keybyte, "AES"); Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding","BC"); byte[] IV = new String("ABCDEF0123456789").getBytes("UTF8"); c.init(c.ENCRYPT_MODE, keys,new IvParameterSpec(IV)); byte[] result = c.doFinal(strByte); rs = Encode(result); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } public String AES256Decrypt(String str,String key){ String rs = null; try { //MD5加密 MessageDigest md5; md5 = MessageDigest.getInstance("MD5"); byte[] keybyte = md5.digest(key.getBytes("UTF8")); //一次SHA256加密 MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); keybyte = sha256.digest(keybyte); //一次AES256解密 //Read more : http://www.ehow.com/info_12201156_java-encryption-aes-256-code.html byte[] strByte = Decode(str); SecretKeySpec keys = new SecretKeySpec(keybyte, "AES"); Cipher c = Cipher.getInstance("AES/CBC/PKCS7Padding","BC"); byte[] IV = new String("ABCDEF0123456789").getBytes("UTF8"); c.init(c.DECRYPT_MODE, keys,new IvParameterSpec(IV)); byte[] result = c.doFinal(strByte); rs = new String(result,"UTF8"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; }
由于一个算法版权问题?AES256会报错,需要把所使用到的jre的两个文件替换掉。目录为jdk1.7.0_79\jre\lib\security下的local_policy.jar和US_export_policy.jar,这两个文件官网上有可以下载,但是我也忘记在哪里了蛤蛤蛤。
完成这个之后还会报错。那就需要添加另外一个jar包bcprov-jdk15on-152.jar(其实这里还有个扩展包bcprov-ext-jdk15on-152.jar,但是我不知道需不需要两个包都放进去才能生效),放在目录jdk1.7.0_79\jre\lib\ext下,另外在jdk1.7.0_79\jre\lib\security\java.security 添加一句
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvide
数字按顺序加入,应该就没问题了。
相关文章推荐
- Java创建多线程的两种方式对比
- java多线程编程之捕获子线程异常示例
- java 抓取网页内容小工具
- Scheme 4 Javaer-3.高阶函数
- 接口interface
- java基本教程之线程休眠 java多线程教程
- java基本教程之java线程等待与java唤醒线程 java多线程教程
- 浅析Java中Map与HashMap,Hashtable,HashSet的区别
- 例子分析java.util.concurrent.ExecutorService
- java 获取当前时间前7天的日期
- Spring3 MVC请求参数获取的几种方法[转]
- final关键字
- java多线程详细总结
- Java中Comparable和Comparator实现对象比较
- JAVA多线程Thread和Runnable的实现
- java向多线程中传递参数的三种方法详细介绍
- java实现文本和文件的压缩和解压缩
- super关键字
- JAVA常用快捷键
- 打开eclipse中文件所在目录