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程序设计有所帮助。