利用Java如何实现一个AES256加密解密功能

  介绍

利用Java如何实现一个AES256加密解密功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一。代码

包com.handler;
  进口java.io.UnsupportedEncodingException;
  进口java.security.Key;
  进口java.security.Security;
  进口javax.crypto.Cipher;
  进口javax.crypto.KeyGenerator;
  进口javax.crypto.SecretKey;
  进口javax.crypto.spec.SecretKeySpec;
  公开课AES256Encryption {
  公共静态最终字符串KEY_ALGORITHM=癆ES";
  公共静态最终字符串CIPHER_ALGORITHM=癆ES/欧洲/PKCS7Padding";
  公共静态byte [] initkey()抛出异常{//实例化密钥生成器
  安全。addProvider(新org.bouncycastle.jce.provider.BouncyCastleProvider ());
  KeyGenerator公斤=KeyGenerator。getInstance (KEY_ALGORITHM“BC");
  kg.init (256);
  kg.init (128);
  SecretKey SecretKey=kg.generateKey ();
  返回secretKey.getEncoded ();
  }
  公共静态byte [] initRootKey()抛出异常{
  返回新byte [] {((0 x04, 0 x0b 0 x02, 0 x0f, 0 x0b 0 x0c,
  0 x01 0 x03 0 x09, 0 x07 0 x0c 0 x03, 0 x07 0 x0a 0 x04 0 x0f,
  0 x06 0 x0f 0 x0e, 0 x09 0 x05 0 x01, 0 x0a 0 x0a 0 x01, 0 x09,
  0 x06, 0 x07 0 x09 0 x0d};
  }
  公共静态关键toKey (byte[]键){抛出异常
  SecretKey SecretKey=new SecretKeySpec(关键,KEY_ALGORITHM);
  返回secretKey;
  }
  公共静态byte[]加密(byte[]的数据,byte[]键){抛出异常
  关键k=toKey(关键);
  安全。addProvider(新org.bouncycastle.jce.provider.BouncyCastleProvider ());
  密码密码=密码。getInstance (CIPHER_ALGORITHM“BC");
  cipher.init(密码。ENCRYPT_MODE k);
  返回cipher.doFinal(数据);
  }
  公共静态byte[]解密(byte[]的数据,byte[]键){抛出异常
  关键k=toKey(关键);
  安全。addProvider(新org.bouncycastle.jce.provider.BouncyCastleProvider ());
  密码密码=密码。getInstance (CIPHER_ALGORITHM“BC");
  cipher.init(密码。DECRYPT_MODE k);
  返回cipher.doFinal(数据);
  }
  公共静态void main (String [] args)抛出UnsupportedEncodingException {
  字符串str=败縮weet";//打印原文
  System.out.println(“原文:“+ str);//密钥
  byte[]键;
  尝试{//生成随机密钥
  关键=AES256Encryption.initkey ();//打印密钥
  System.out.print(“密钥:“);
  (int i=0;我
  System.out.printf (“% x",键[我]);
  }
  System.out.print (“n");//加密
  byte [] data=https://www.yisu.com/zixun/AES256Encryption.encrypt (str.getBytes()键);//打印密文
  System.out.print(“加密后:”);
  (int i=0;我
  system . out。printf (" % x”,数据[我]);
  }
  System.out.print (“n”);//解密密文
  data=AES256Encryption.decrypt(数据、关键);//打印原文
  system . out。println(“解密后:“+新字符串(数据));
  }捕捉(异常e) {
  e.printStackTrace ();
  }

二。注意

1。需要在工程中引入bcprov - jdk15 - 133. - jar
本站下载链接。

2。替换jrelibsecurity下的local_policy。jar和US_export_policy.jar

本站下载链接。

1)如果程序使用是系统jdk,则替换系统环境变量的jdk中jrelibsecurity下的jar包。

2)如果程序是在MyEclipse中运行,则找到MyEclipse使用的jdk(方法:在MyEclipse里面进入窗口→选项→java选项里面有一个安装jre的选项,点击右边会出现一个列表,里面有你现在用到的jdk版本及路径),替换该jdk中jrelibsecurity下的jar包。

可以解决:java.security。InvalidKeyException:非法关键尺寸或默认参数异常

三。如果密钥需要存入数据库,则需要对密钥进行base64编码,即将密钥(字节数组)通过base64编码转换成密钥(String类型);从数据库中读取密钥时,则使用base64解码,即将密钥(String类型)转换成密钥(字节数组)。

看完上述内容,你们掌握利用Java如何实现一个AES256加密解密功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

利用Java如何实现一个AES256加密解密功能