import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import net.tarring.common.exception.TarringException;
public class CipherUtil {
/**
* 对字节数组进行摘要运算
*
* @param byteData
* 字节数组源数据
*
* @param algorithm
* 消息摘要加密算法(包括SHA-1、MD5)
*
* @return 经消息摘要加密后的密文
*
* @throws TarringException
*/
public static byte[] digest(byte[] byteData, String algorithm) throws TarringException {
MessageDigest md = null;
byte[] afterEncrypt = null;
try {
md = MessageDigest.getInstance(algorithm);
afterEncrypt = md.digest(byteData);
} catch (NoSuchAlgorithmException e) {
throw new TarringException(e.getMessage(), e);
}
return afterEncrypt;
}
/**
* 对一个字节数组进行AES加密
*
* @param byteSrc
* 字节数组明文
* @param key
* 密钥
*
* @return 字节数组密文
*
* @throws TarringException
*/
public static byte[] encrypt(byte[] byteSrc, SecretKey key) throws TarringException {
try {
Cipher cipher = Cipher.getInstance("AES"); // 创建密码器
cipher.init(Cipher.ENCRYPT_MODE, key); // 初始化
return cipher.doFinal(byteSrc); // 加密
} catch (Exception e) {
throw new TarringException(e.getMessage(), e);
}
}
/**
* 对一个字节数组进行AES解密
*
* @param message
* 字节数组密文
* @param key
* 密钥
*
* @return 字节数组明文
*
* @throws TarringException
*/
public static byte[] decrypt(byte[] message, SecretKey key) throws TarringException {
try {
Cipher cipher = Cipher.getInstance("AES"); // 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key); // 初始化
byte[] ptext = cipher.doFinal(message); // 解密
return ptext;
// String str = new String(ptext, "UTF-8"); // 重新显示明文
} catch (Exception e) {
throw new TarringException(e.getMessage(), e);
}
}
}