packagecom.pcict.util.test;importorg.apache.commons.codec.binary.Base64;import javax.crypto.*;importjavax.crypto.spec.DESedeKeySpec;importjava.nio.charset.Charset;importjava.security.InvalidKeyException;importjava.security.Key;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjava.security.spec.InvalidKeySpecException;importjava.util.Arrays;/*** DESede对称加密算法
*
* @Description
*@authorljz
* @created 2015年7月31日 上午11:30:04
*@version* @history
*@see
*/
public classDESedeUtils {//加密模式
public static final int ENCRYPT_MODE =Cipher.ENCRYPT_MODE;//解密模式
public static final int DECRYPT_MODE =Cipher.DECRYPT_MODE;private static final String ALGORITHM = "DESede";private static final Charset UTF8 = Charset.forName("UTF-8");private Cipher cipher = null;private int opmode = 0;//初始化加密或解密
public synchronized boolean init(intmode, String key) {if (opmode != 0) {return true;
}if (mode != ENCRYPT_MODE && mode !=DECRYPT_MODE) {return false;
}if (key == null ||key.isEmpty()) {return false;
}try{
cipher=Cipher.getInstance(ALGORITHM);
}catch(NoSuchAlgorithmException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(NoSuchPaddingException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{if (cipher == null) {return false;
}
}
Key secKey=getSecKey(key);if (secKey == null) {return false;
}try{
cipher.init(mode, secKey,newSecureRandom());
}catch(InvalidKeyException e) {//TODO Auto-generated catch block
e.printStackTrace();return false;
}
opmode=mode;return true;
}private staticKey getSecKey(String key) {
SecretKey securekey= null;try{byte[] material =Arrays.copyOf(
Base64.decodeBase64(key.getBytes(UTF8)),24);
DESedeKeySpec keySpec= newDESedeKeySpec(material);
SecretKeyFactory keyFactory=SecretKeyFactory
.getInstance(ALGORITHM);
securekey=keyFactory.generateSecret(keySpec);
}catch(InvalidKeyException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(NoSuchAlgorithmException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(InvalidKeySpecException e) {//TODO Auto-generated catch block
e.printStackTrace();
}returnsecurekey;
}//加密
public synchronizedString encrypt(String data) {if (opmode !=ENCRYPT_MODE) {return null;
}if (data == null) {return null;
}byte[] encData = null;try{
encData=cipher.doFinal(data.getBytes(UTF8));
}catch(IllegalBlockSizeException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(BadPaddingException e) {//TODO Auto-generated catch block
e.printStackTrace();
}if (encData == null) {return null;
}return newString(Base64.encodeBase64(encData), UTF8);
}//解密
public synchronizedString decrypt(String data) {if (opmode !=DECRYPT_MODE) {return null;
}if (data == null) {return null;
}byte[] decData = null;try{
decData=cipher.doFinal(Base64.decodeBase64(data.getBytes(UTF8)));
}catch(IllegalBlockSizeException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(BadPaddingException e) {//TODO Auto-generated catch block
e.printStackTrace();
}if (decData == null) {return null;
}return newString(decData, UTF8);
}
}