import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.io.UnsupportedEncodingException;
import java.security.Key;
public class ThreeDES {
private static final String IV = "1234567-";
private final static String encoding = "utf-8" ;
/**
* DESCBC加密
*
* @param src
* 数据源
* @param key
* 密钥
* @return 返回加密后的数据
* @throws Exception
*/
public static String encryptDESCBC(final String src, final String key) throws Exception {
Key deskey = null ;
DESedeKeySpec spec = new DESedeKeySpec(key.getBytes());
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );
IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
byte [] encryptData = cipher.doFinal(src.getBytes(encoding));
return Base64.encodeBase64URLSafeString(encryptData);
}
/**
* DESCBC解密
*
* @param src
* 数据源
* @param key
* 密钥
* @return 返回解密后的原始数据
* @throws Exception
*/
public static String decryptDESCBC(final String src, final String key) throws Exception {
Key deskey = null ;
DESedeKeySpec spec = new DESedeKeySpec(key.getBytes());
SecretKeyFactory keyfactory = SecretKeyFactory.getInstance( "desede" );
deskey = keyfactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance( "desede/CBC/PKCS5Padding" );
IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
byte [] decryptData = cipher.doFinal(Base64.decodeBase64(src));
return new String(decryptData, encoding);
}
public static String padding(String str) {
byte[] oldByteArray;
try {
oldByteArray = str.getBytes("UTF8");
int numberToPad = 8 - oldByteArray.length % 8;
byte[] newByteArray = new byte[oldByteArray.length + numberToPad];
System.arraycopy(oldByteArray, 0, newByteArray, 0,
oldByteArray.length);
for (int i = oldByteArray.length; i < newByteArray.length; ++i) {
newByteArray[i] = 0;
}
return new String(newByteArray, "UTF8");
} catch (UnsupportedEncodingException e) {
System.out.println("Crypter.padding UnsupportedEncodingException");
}
return null;
}
}