java实现AES可逆加密算法
本文实例为大家分享了java实现AES可逆加密算法的具体代码,供大家参考,具体内容如下
packagecom.hdu.encode;
importjavax.crypto.Cipher;
importjavax.crypto.spec.IvParameterSpec;
importjavax.crypto.spec.SecretKeySpec;
importsun.misc.BASE64Decoder;
importsun.misc.BASE64Encoder;
/**
*AES是一种可逆加密算法,对用户的敏感信息加密处理对原始数据进行AES加密后,在进行Base64编码转化;
*/
publicclassAESOperator{
/*
*加密用的Key可以用26个字母和数字组成此处使用AES-128-CBC加密模式,key需要为16位。
*/
//a0b891c2d563e4f7
privateStringsKey="abcdef0123456789";
privateStringivParameter="0123456789abcdef";
privatestaticAESOperatorinstance=null;
privateAESOperator(){
}
publicstaticAESOperatorgetInstance(){
if(instance==null)
instance=newAESOperator();
returninstance;
}
//加密
publicStringencrypt(StringsSrc){
Stringresult="";
try{
Ciphercipher;
cipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[]raw=sKey.getBytes();
SecretKeySpecskeySpec=newSecretKeySpec(raw,"AES");
IvParameterSpeciv=newIvParameterSpec(ivParameter.getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE,skeySpec,iv);
byte[]encrypted=cipher.doFinal(sSrc.getBytes("utf-8"));
result=newBASE64Encoder().encode(encrypted);
}catch(Exceptione){
e.printStackTrace();
}
//此处使用BASE64做转码。
returnresult;
}
//解密
publicStringdecrypt(StringsSrc){
try{
byte[]raw=sKey.getBytes("ASCII");
SecretKeySpecskeySpec=newSecretKeySpec(raw,"AES");
Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpeciv=newIvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE,skeySpec,iv);
byte[]encrypted1=newBASE64Decoder().decodeBuffer(sSrc);//先用base64解密
byte[]original=cipher.doFinal(encrypted1);
StringoriginalString=newString(original,"utf-8");
returnoriginalString;
}catch(Exceptionex){
ex.printStackTrace();
returnnull;
}
}
publicstaticvoidmain(String[]args){
//需要加密的字串
StringcSrc="测试";
System.out.println(cSrc+"长度为"+cSrc.length());
//加密
longlStart=System.currentTimeMillis();
StringenString=AESOperator.getInstance().encrypt(cSrc);
System.out.println("加密后的字串是:"+enString+"长度为"+enString.length());
longlUseTime=System.currentTimeMillis()-lStart;
System.out.println("加密耗时:"+lUseTime+"毫秒");
//解密
lStart=System.currentTimeMillis();
StringDeString=AESOperator.getInstance().decrypt(enString);
System.out.println("解密后的字串是:"+DeString);
lUseTime=System.currentTimeMillis()-lStart;
System.out.println("解密耗时:"+lUseTime+"毫秒");
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。