import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Des3 { public static void main (String [] args) throws Exception { byte [] key = new BASE64Decoder () decodeBuffer ("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4").; byte [] keyiv = {1, 2, 3, 4, 5, 6, 7, 8}; byte [] data = "China ABCabc123" .getBytes ("UTF-8"); System.out.println ("ECB encryption and decryption"); byte [] str3 = des3EncodeECB (key, data); byte [] str4 = ees3DecodeECB (key, str3); System.out.println (new BASE64Encoder () encode (str3).); System.out.println (new String (str4, "UTF-8")); System.out.println (); System.out.println ("CBC encryption and decryption"); byte [] str5 = des3EncodeCBC (key, keyiv, data); byte [] str6 = des3DecodeCBC (key, keyiv, str5); System.out.println (new BASE64Encoder () encode (str5).); System.out.println (new String (str6, "UTF-8")); } / ** * ECB encryption, not IV *param Key Key *param Data in plain text *return Base64-encoded ciphertext *throws Exception * / public static byte [] des3EncodeECB (byte [] key, byte [] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec (key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance ("desede"); deskey = keyfactory.generateSecret (spec); Cipher cipher = Cipher.getInstance ("desede" + "/ ECB / PKCS5Padding"); cipher.init (Cipher.ENCRYPT_MODE, deskey); byte [] bOut = cipher.doFinal (data); return bOut; } / ** * ECB decryption, not IV *param Key Key *param Data Base64 encoded ciphertext *return Plaintext *throws Exception * / public static byte [] ees3DecodeECB (byte [] key, byte [] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec (key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance ("desede"); deskey = keyfactory.generateSecret (spec); Cipher cipher = Cipher.getInstance ("desede" + "/ ECB / PKCS5Padding"); cipher.init (Cipher.DECRYPT_MODE, deskey); byte [] bOut = cipher.doFinal (data); return bOut; } / ** * CBC encryption *param Key Key *param Keyiv IV *param Data in plain text *return Base64-encoded ciphertext *throws Exception * / public static byte [] des3EncodeCBC (byte [] key, byte [] keyiv, byte [] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec (key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance ("desede"); deskey = keyfactory.generateSecret (spec); Cipher cipher = Cipher.getInstance ("desede" + "/ CBC / PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec (keyiv); cipher.init (Cipher.ENCRYPT_MODE, deskey, ips); byte [] bOut = cipher.doFinal (data); return bOut; } / ** * CBC decryption *param Key Key *param Keyiv IV *param Data Base64 encoded ciphertext *return Plaintext *throws Exception * / public static byte [] des3DecodeCBC (byte [] key, byte [] keyiv, byte [] data) throws Exception { Key deskey = null; DESedeKeySpec spec = new DESedeKeySpec (key); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance ("desede"); deskey = keyfactory.generateSecret (spec); Cipher cipher = Cipher.getInstance ("desede" + "/ CBC / PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec (keyiv); cipher.init (Cipher.DECRYPT_MODE, deskey, ips); byte [] bOut = cipher.doFinal (data); return bOut; } }