Java原生方法实现 AES 算法示例
本文实例讲述了Java原生方法实现AES算法。分享给大家供大家参考,具体如下:
AES(AdvancedEncryptionStandard)高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。现已成为对称密钥加密中最流行的算法之一。
/** *AES算法 * *算法采用加密模式:CBC;数据块:128;填充:PKCS5Padding * *key与向量字符串的长度为16位 * *@authorDeniroLi(lisq037@163.com) *2018/3/17 */ publicclassAES{ /** *算法名称 */ publicstaticfinalStringNAME="AES"; /** *加密模式:CBC;数据块:128;填充:PKCS5Padding */ publicfinalStringMODE="AES/CBC/PKCS5Padding"; /** *KEY与向量字符串的长度 */ publicstaticfinalintLENGTH=16; /** *加密用的KEY */ privateStringkey; /** *向量,用于增加加密强度 */ privateStringivParameter; /** *@paramkey加密用的KEY *@paramivParameter偏移量 */ publicAES(Stringkey,StringivParameter){ if(key==null||key.length()!=LENGTH){ thrownewAESException("KEY不存在,或者长度不为"+LENGTH); } if(ivParameter==null||ivParameter.length()!=LENGTH){ thrownewAESException("ivParameter不存在,或者长度不为"+LENGTH); } this.key=key; this.ivParameter=ivParameter; } /** *加密 * *@params要加密的字符串 *@return加密后的字符串 */ publicStringencode(Strings){ Stringresult; try{ Ciphercipher=Cipher.getInstance(MODE); IvParameterSpeciv=newIvParameterSpec(ivParameter.getBytes()); cipher.init(ENCRYPT_MODE,newSecretKeySpec(key.getBytes(),NAME),iv); byte[]bytes=cipher.doFinal(s.getBytes(ENCODING)); result=newBASE64Encoder().encode(bytes); }catch(Exceptione){ thrownewAESException("加密",e); } returnresult; } /** *解密 * *@params待解密的字符串 *@return解密后的字符串 */ publicStringdecode(Strings){ try{ SecretKeySpeckeySpec=newSecretKeySpec(key.getBytes("ASCII"),NAME); Ciphercipher=Cipher.getInstance(MODE); IvParameterSpeciv=newIvParameterSpec(ivParameter.getBytes()); cipher.init(Cipher.DECRYPT_MODE,keySpec,iv); returnnewString(cipher.doFinal(newBASE64Decoder().decodeBuffer(s)),ENCODING); }catch(Exceptione){ thrownewAESException("解密",e); } } }
单元测试:
publicclassAESTest{ AESaes; @Before publicvoidinit(){ aes=newAES("12345abcdef67890","1234567890abcdef"); } @Test publicvoidtestEncode()throwsException{ Assert.assertEquals("jANei3LBvnLCaZ2XddWHZw==",aes.encode("123456")); } @Test publicvoidtestDecode()throwsException{ Assert.assertEquals("123456",aes.decode("jANei3LBvnLCaZ2XddWHZw==")); } }
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含