import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class 3DESUtil {
/**
* ECB加密,不要IV
* @param key 密钥
* @param data 明文
* @return Base64编码的密文
* @throws Exception
*/
public static String des3EncodeECB(String key, String data)
throws Exception {
key = procKey(key);
byte[] newkey = new BASE64Decoder().decodeBuffer(key);
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(newkey);
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, deskey);
byte[] newdata = data.getBytes("UTF-8");
byte[] bOut = cipher.doFinal(newdata);
return new BASE64Encoder().encode(bOut);
}
/**
* ECB解密,不要IV
* @param key 密钥
* @param data Base64编码的密文
* @return 明文
* @throws Exception
*/
public static String ees3DecodeECB(String key, String data)
throws Exception {
key = procKey(key);
byte[] newkey = new BASE64Decoder().decodeBuffer(key);
Key deskey = null;
DESedeKeySpec spec = new DESedeKeySpec(newkey);
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance("desede" + "/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, deskey);
byte[] newdata = new BASE64Decoder().decodeBuffer(data);
byte[] bOut = cipher.doFinal(newdata);
return new String(bOut,"UTF-8");
}
private static String procKey(String key) {
if(key.length()<32) {
while(key.length()<32) {
key = key + "0";
}
return key;
}else if(key.length()>32) {
return key.substring(0,32);
}
return key;
}
}