import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class DES {
public DES() {
}
public static DES getInstance(String key) throws NoSuchPaddingException,
NoSuchAlgorithmException {
return getInstance(getKeyByStr(key));
}
public static DES getInstance(byte key[]) throws NoSuchPaddingException,
NoSuchAlgorithmException {
DES des = new DES();
if (des.key == null) {
SecretKeySpec spec = new SecretKeySpec(key, "DES");
des.key = spec;
}
des.cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
return des;
}
public byte[] encrypt(byte b[]) throws InvalidKeyException,
BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
byte byteFina[] = null;
cipher.init(1, key);
byteFina = cipher.doFinal(b);
return byteFina;
}
public byte[] decrypt(byte b[]) throws InvalidKeyException,
BadPaddingException, IllegalBlockSizeException,
IllegalStateException {
byte byteFina[] = null;
cipher.init(2, key);
byteFina = cipher.doFinal(b);
return byteFina;
}
public static byte[] getKeyByStr(String str) {
byte bRet[] = new byte[str.length() / 2];
for (int i = 0; i < str.length() / 2; i++) {
Integer itg = new Integer(16 * getChrInt(str.charAt(2 * i))
+ getChrInt(str.charAt(2 * i + 1)));
bRet[i] = itg.byteValue();
}
return bRet;
}
private static int getChrInt(char chr) {
int iRet = 0;
if (chr == "0".charAt(0))
iRet = 0;
if (chr == "1".charAt(0))
iRet = 1;
if (chr == "2".charAt(0))
iRet = 2;
if (chr == "3".charAt(0))
iRet = 3;
if (chr == "4".charAt(0))
iRet = 4;
if (chr == "5".charAt(0))
iRet = 5;
if (chr == "6".charAt(0))
iRet = 6;
if (chr == "7".charAt(0))
iRet = 7;
if (chr == "8".charAt(0))
iRet = 8;
if (chr == "9".charAt(0))
iRet = 9;
if (chr == "A".charAt(0))
iRet = 10;
if (chr == "B".charAt(0))
iRet = 11;
if (chr == "C".charAt(0))
iRet = 12;
if (chr == "D".charAt(0))
iRet = 13;
if (chr == "E".charAt(0))
iRet = 14;
if (chr == "F".charAt(0))
iRet = 15;
return iRet;
}
private Key key;
private Cipher cipher;
/**
* @interpret 进行base64加密操作
* @param text
* @param keyString
* @return String
*/
public String encrypt(String text, String keyString) {
String body = null;
try {
DES des = DES.getInstance(keyString);
byte[] b = des.encrypt(text.getBytes("UTF8"));
body = new String(Base64.encodeBase64(b));
} catch (Exception ex) {
}
return body;
}
/**
* @interpret 进行base64进行解密
* @param text
* @param keyString
* @return String
*/
public String decrypt(String text, String keyString) {
String body = null;
try {
DES des = DES.getInstance(keyString);
byte[] b = Base64.decodeBase64(text.getBytes());
body = new String(des.decrypt(b), "UTF8");
} catch (Exception e) {
e.printStackTrace();
}
return body;
}
public String authcode(String content, String operation, String key){
String encontent = null;
if (operation != null && operation.equals("DECODE")) {
encontent = encrypt(content,key);
} else if (operation != null && operation.equals("ENCODE")) {
encontent = decrypt(content,key);
}
return encontent;
}
public static void main(String[] args) {
DES des = new DES();
System.out.println(des.authcode("wewweewewew=","DECODE","0102030405060708"));//加密
System.out.println(des.authcode("d8fPhfd9JkW99p8aqhtVIA==","ENCODE","0102030405060708"));//解密
}
}