importjava.security.MessageDigest;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;/*** Java 加解密工具类
*
*@authormosesxin@gmail.com
**/
public classEncryptUtil {private static final String UTF8 = "utf-8";//定义 加密算法,可用 DES,DESede,Blowfish
private static final String ALGORITHM_DESEDE = "DESede";/*** MD5数字签名
*
*@paramsrc
*@return*@throwsException*/
public String md5Digest(String src) throwsException {//定义数字签名方法, 可用:MD5, SHA-1
MessageDigest md = MessageDigest.getInstance("MD5");byte[] b =md.digest(src.getBytes(UTF8));return this.byte2HexStr(b);
}/*** BASE64 加密
*
*@paramsrc
*@return*@throwsException*/
public String base64Encoder(String src) throwsException {
BASE64Encoder encoder= newBASE64Encoder();returnencoder.encode(src.getBytes(UTF8));
}/*** BASE64解密
*
*@paramdest
*@return*@throwsException*/
public String base64Decoder(String dest) throwsException {
BASE64Decoder decoder= newBASE64Decoder();return newString(decoder.decodeBuffer(dest), UTF8);
}/*** 3DES加密
*
*@paramsrc
*@paramkey
*@return*@throwsException*/
public String desedeEncoder(String src, String key) throwsException {
SecretKey secretKey= newSecretKeySpec(build3DesKey(key), ALGORITHM_DESEDE);
Cipher cipher=Cipher.getInstance(ALGORITHM_DESEDE);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] b =cipher.doFinal(src.getBytes(UTF8));returnbyte2HexStr(b);
}/*** 3DES解密
*
*@paramdest
*@paramkey
*@return*@throwsException*/
public String desedeDecoder(String dest, String key) throwsException {
SecretKey secretKey= newSecretKeySpec(build3DesKey(key), ALGORITHM_DESEDE);
Cipher cipher=Cipher.getInstance(ALGORITHM_DESEDE);
cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] b =cipher.doFinal(str2ByteArray(dest));return newString(b, UTF8);
}/*** 字节数组转化为大写16进制字符串
*
*@paramb
*@return
*/
private String byte2HexStr(byte[] b) {
StringBuilder sb= newStringBuilder();for (int i = 0; i < b.length; i++) {
String s= Integer.toHexString(b[i] & 0xFF);if (s.length() == 1) {
sb.append("0");
}
sb.append(s.toUpperCase());
}returnsb.toString();
}/*** 字符串转字节数组
*
*@params
*@return
*/
private byte[] str2ByteArray(String s) {int byteArrayLength = s.length()/2;byte[] b = new byte[byteArrayLength];for (int i = 0; i < byteArrayLength; i++) {byte b0 = (byte) Integer.valueOf(s.substring(i*2, i*2+2), 16).intValue();
b[i]=b0;
}returnb;
}/*** 构造3DES加解密方法key
*
*@paramkeyStr
*@return*@throwsException*/
private byte[] build3DesKey(String keyStr) throwsException {byte[] key = new byte[24];byte[] temp =keyStr.getBytes(UTF8);if (key.length >temp.length) {
System.arraycopy(temp,0, key, 0, temp.length);
}else{
System.arraycopy(temp,0, key, 0, key.length);
}returnkey;
}
}