介绍
利用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加密解密功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!