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:关于加密解密感兴趣的朋友还可以参考本站在线工具:
文字在线加密解密工具(包含