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+"毫秒"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。