package com.mtools.core.plugin.security;
import java.io.InputStream;
import java.io.OutputStream;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class Des3Util {
private static final String ALGORITHM = "DESede";
//定义 加密算法,可用 DES,DESede,Blowfish
//keybyte为加密密钥,长度为24字节
//src为被加密的数据缓冲区(源)
/**
* 设置数据流为加密模式
* @param secretKey
* @param outputStream
* @return
*/
public static CipherOutputStream encryptMode(SecretKey secretKey, OutputStream outputStream) {
try {
//加密
Cipher c1 = Cipher.getInstance(ALGORITHM);
c1.init(Cipher.ENCRYPT_MODE, secretKey);
return new CipherOutputStream(outputStream, c1);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 设置数据流为加密模式
* @param des3Key
* @param outputStream
* @return
*/
public static CipherOutputStream encryptMode(String des3Key, OutputStream outputStream) {
//生成密钥
SecretKey secretKey = new SecretKeySpec(des3Key.getBytes(), ALGORITHM);
return encryptMode(secretKey, outputStream);
}
/**
* 设置数据流为解密模式
* @param des3Key
* @param inputStream
* @return
*/
public static CipherInputStream decryptMode(String des3Key, InputStream inputStream) {
//生成密钥
SecretKey deskey = new SecretKeySpec(des3Key.getBytes(), ALGORITHM); //解密
return decryptMode(deskey, inputStream);
}
/**
* 设置数据流为解密模式
* @param secretKey
* @param inputStream
* @return
*/
public static CipherInputStream decryptMode(SecretKey secretKey, InputStream inputStream) {
try {
Cipher c1 = Cipher.getInstance(ALGORITHM);
c1.init(Cipher.DECRYPT_MODE, secretKey);
return new CipherInputStream(inputStream, c1);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}