java基于AES对称加密算法实现的加密与解密功能示例
本文实例讲述了java基于AES对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:
packagecom.soufun.com; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importjava.security.NoSuchAlgorithmException; importjava.security.SecureRandom; importjava.util.Date; importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher; importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.KeyGenerator; importjavax.crypto.NoSuchPaddingException; importjavax.crypto.SecretKey; importjavax.crypto.spec.SecretKeySpec; /** *@authorWHD */ publicclassAesUtil{ privatestaticfinalStringAES="AES"; privatestaticfinalStringUTF8="UTF-8"; staticKeyGeneratorkgen=null; static{ try{ kgen=KeyGenerator.getInstance(AES); }catch(NoSuchAlgorithmExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } /* *@paramcontent: *@parampassword: */ privatestaticbyte[]encrypt(Stringcontent,Stringpassword){ try{ //使用静态代码块来生成KeyGenerator对象 //KeyGeneratorkgen=KeyGenerator.getInstance(AES); //使用128位 kgen.init(128,newSecureRandom(password.getBytes())); SecretKeysecretKey=kgen.generateKey(); byte[]encodeFormat=secretKey.getEncoded(); SecretKeySpeckey=newSecretKeySpec(encodeFormat,AES); //Cipher对象实际完成加密操作 Ciphercipher=Cipher.getInstance(AES); //加密内容进行编码 byte[]byteContent=content.getBytes(UTF8); //用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE,key); //正式执行加密操作 byte[]result=cipher.doFinal(byteContent); returnresult; }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(NoSuchPaddingExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); } returnnull; } /* *@paramcontent: *@parampassword: */ privatestaticbyte[]decrypt(byte[]content,Stringpassword){ try{//使用静态代码块来生成KeyGenerator对象 //KeyGeneratorkgen=KeyGenerator.getInstance(AES); //使用128位 kgen.init(128,newSecureRandom(password.getBytes())); SecretKeysecretKey=kgen.generateKey(); byte[]encodeFormat=secretKey.getEncoded(); SecretKeySpeckey=newSecretKeySpec(encodeFormat,AES); //Cipher对象实际完成加密操作 Ciphercipher=Cipher.getInstance(AES); //用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE,key); //正式执行解密操作 byte[]result=cipher.doFinal(content); returnresult; }catch(NoSuchAlgorithmExceptione){ e.printStackTrace(); }catch(NoSuchPaddingExceptione){ e.printStackTrace(); }catch(InvalidKeyExceptione){ e.printStackTrace(); }catch(IllegalBlockSizeExceptione){ e.printStackTrace(); }catch(BadPaddingExceptione){ e.printStackTrace(); } returnnull; } /** *二进制--》十六进制转化 *@parambuf *@return */ privatestaticStringparseByte2HexStr(bytebuf[]){ StringBuffersb=newStringBuffer(); for(inti=0;i<buf.length;i++){ Stringhex=Integer.toHexString(buf[i]&0xFF); if(hex.length()==1){ hex='0'+hex; } sb.append(hex.toUpperCase()); } returnsb.toString(); } /** *十六进制--》二进制转化 *@paramhexStr *@return */ privatestaticbyte[]parseHexStr2Byte(StringhexStr){ if(hexStr.length()<1){ returnnull; } byte[]result=newbyte[hexStr.length()/2]; for(inti=0;i<hexStr.length()/2;i++){ inthigh=Integer.parseInt(hexStr.substring(i*2,i*2+1),16); intlow=Integer.parseInt(hexStr.substring(i*2+1,i*2+2), 16); result[i]=(byte)(high*16+low); } returnresult; } publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{ longbegin=newDate().getTime(); Stringcontent="aaades加密测试"; Stringpassword="12345678dd"; //加密 System.out.println("加密前:"+content); byte[]encryptResult=encrypt(content,password); StringencryptResultStr=parseByte2HexStr(encryptResult); System.out.println("加密后:"+encryptResultStr); //解密 byte[]decryptFrom=parseHexStr2Byte(encryptResultStr); byte[]decryptResult=decrypt(decryptFrom,password); //解密内容进行解码 Stringresult=newString(decryptResult,UTF8); System.out.println("解密后:"+result); longend=newDate().getTime(); System.out.println(end-begin); } }
注:SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行,可以复原这个序列。
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe
高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword
迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述对大家java程序设计有所帮助。