JAVA中AES对称加密和解密过程
AES对称加密和解密代码详细介绍,供大家参考,具体内容如下
packagedemo.security; importjava.io.IOException; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importjava.security.NoSuchAlgorithmException; importjava.security.SecureRandom; importjava.util.Base64; importjava.util.Scanner; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.KeyGenerator; importjavax.crypto.NoSuchPaddingException; importjavax.crypto.SecretKey; importjavax.crypto.spec.SecretKeySpec; importsun.misc.BASE64Decoder; importsun.misc.BASE64Encoder; /* *AES对称加密和解密 */ publicclassSymmetricEncoder{ /* *加密 *1.构造密钥生成器 *2.根据ecnodeRules规则初始化密钥生成器 *3.产生密钥 *4.创建和初始化密码器 *5.内容加密 *6.返回字符串 */ publicstaticStringAESEncode(StringencodeRules,Stringcontent){ try{ //1.构造密钥生成器,指定为AES算法,不区分大小写 KeyGeneratorkeygen=KeyGenerator.getInstance("AES"); //2.根据ecnodeRules规则初始化密钥生成器 //生成一个128位的随机源,根据传入的字节数组 keygen.init(128,newSecureRandom(encodeRules.getBytes())); //3.产生原始对称密钥 SecretKeyoriginal_key=keygen.generateKey(); //4.获得原始对称密钥的字节数组 byte[]raw=original_key.getEncoded(); //5.根据字节数组生成AES密钥 SecretKeykey=newSecretKeySpec(raw,"AES"); //6.根据指定算法AES自成密码器 Ciphercipher=Cipher.getInstance("AES"); //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY cipher.init(Cipher.ENCRYPT_MODE,key); //8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码 byte[]byte_encode=content.getBytes("utf-8"); //9.根据密码器的初始化方式--加密:将数据加密 byte[]byte_AES=cipher.doFinal(byte_encode); //10.将加密后的数据转换为字符串 //这里用Base64Encoder中会找不到包 //解决办法: //在项目的Buildpath中先移除JRESystemLibrary,再添加库JRESystemLibrary,重新编译后就一切正常了。 StringAES_encode=newString(newBASE64Encoder().encode(byte_AES)); //11.将字符串返回 returnAES_encode; }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(NoSuchPaddingExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } //如果有错就返加nulll returnnull; } /* *解密 *解密过程: *1.同加密1-4步 *2.将加密后的字符串反纺成byte[]数组 *3.将加密内容解密 */ publicstaticStringAESDncode(StringencodeRules,Stringcontent){ try{ //1.构造密钥生成器,指定为AES算法,不区分大小写 KeyGeneratorkeygen=KeyGenerator.getInstance("AES"); //2.根据ecnodeRules规则初始化密钥生成器 //生成一个128位的随机源,根据传入的字节数组 keygen.init(128,newSecureRandom(encodeRules.getBytes())); //3.产生原始对称密钥 SecretKeyoriginal_key=keygen.generateKey(); //4.获得原始对称密钥的字节数组 byte[]raw=original_key.getEncoded(); //5.根据字节数组生成AES密钥 SecretKeykey=newSecretKeySpec(raw,"AES"); //6.根据指定算法AES自成密码器 Ciphercipher=Cipher.getInstance("AES"); //7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEY cipher.init(Cipher.DECRYPT_MODE,key); //8.将加密并编码后的内容解码成字节数组 byte[]byte_content=newBASE64Decoder().decodeBuffer(content); /* *解密 */ byte[]byte_decode=cipher.doFinal(byte_content); StringAES_decode=newString(byte_decode,"utf-8"); returnAES_decode; }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(NoSuchPaddingExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); } //如果有错就返加nulll returnnull; } publicstaticvoidmain(String[]args){ SymmetricEncoderse=newSymmetricEncoder(); Scannerscanner=newScanner(System.in); /* *加密 */ System.out.println("使用AES对称加密,请输入加密的规则"); StringencodeRules=scanner.next(); System.out.println("请输入要加密的内容:"); Stringcontent=scanner.next(); System.out.println("根据输入的规则"+encodeRules+"加密后的密文是:"+se.AESEncode(encodeRules,content)); /* *解密 */ System.out.println("使用AES对称解密,请输入加密的规则:(须与加密相同)"); encodeRules=scanner.next(); System.out.println("请输入要解密的内容(密文):"); content=scanner.next(); System.out.println("根据输入的规则"+encodeRules+"解密后的明文是:"+se.AESDncode(encodeRules,content)); } }
测试结果:
使用AES对称加密,请输入加密的规则
使用AES对称加密
请输入要加密的内容:
使用AES对称加密
根据输入的规则使用AES对称加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
使用AES对称解密,请输入加密的规则:(须与加密相同)
使用AES对称加密
请输入要解密的内容(密文):
Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
根据输入的规则使用AES对称加密解密后的明文是:使用AES对称加密
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。