public static void main(String []args) {
long start = System.nanoTime();
DESDataTransformer des = new DESDataTransformer("811");
StringBuffer content = new StringBuffer();
content.append("BEGIN:VCARD");
content.append("VERSION:2.1");
content.append("N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;=E6=AC=A7=E9=98=B3=E9=94=8B;;;");
content.append("FN;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:=E6=AC=A7=E9=98=B3=E9=94=8B");
content.append("TEL;CELL:13163209158");
content.append("END:VCARD");
try {
// System.out.println(StringTools.getUTF8String(des.encode(StringTools.getUTF8Bytes(content.toString()))));
byte [] decodeContent = des.decode(des.encode(StringTools.getUTF8Bytes(content.toString())));
System.out.println(StringTools.getUTF8String(decodeContent));
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("time=" + ((System.nanoTime() - start)/ (1000 * 1000)));
}
public DESDataTransformer(String key) {
this(key, "des");
}
public DESDataTransformer(String key, String name) {
super(key, name);
// TODO Auto-generated constructor stub
}
@Override
public byte[] encode(byte[] data) throws TransformerException {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(StringTools.getUTF8Bytes(this.key));
byte[] keyBytes = md.digest();
// create key
DESKeySpec key = new DESKeySpec(keyBytes);
SecretKeySpec DESKey = new SecretKeySpec(key.getKey(), "DES");
// create cipher
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, DESKey);
// encrypt info
return StringTools.getUTF8Bytes(StringTools.byte2hex(cipher.doFinal(data)));
} catch (Exception e) {
throw new TransformerException("Transformation error: ", e);
}
}
@Override
public String encode(String data) throws TransformerException {
return StringTools.getUTF8String(encode(StringTools.getUTF8Bytes(data)));
}
@Override
public byte[] decode(byte[] data) throws TransformerException {
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
md.update(StringTools.getUTF8Bytes(this.key));
byte[] keyBytes = md.digest();
// create key
DESKeySpec key = new DESKeySpec(keyBytes);
SecretKeySpec DESKey = new SecretKeySpec(key.getKey(), "DES");
// create cipher
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, DESKey);
// decrypt info
return cipher.doFinal(StringTools.hex2byte(data));
} catch (Exception e) {
throw new TransformerException(e);
}
}
@Override
public String decode(String data) throws TransformerException {
return StringTools.getUTF8String(decode(StringTools.getUTF8Bytes(data)));
}