When calling the 3DES encryption and decryption algorithm provided by sun company in java, you need to use $JAVA_HOME/jre/lib The 4 jar packages in the / directory are as follows:
jce.jar
security/US_export_policy.jar
security/local_policy.jar
ext/sunjce_provider.jar
These packages are automatically loaded when Java is running, so applications with main function do not need to be set to CLASSPATH Environment variables. For WEB applications, these packages need to be added to the WEB-INF/lib directory.
The following is a sample code for calling the 3DES encryption and decryption algorithm provided by Sun in java:
/*String DESede(3DES) encryption*/
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
public class ThreeDes {
private static final String Algorithm = “DESede”; //Define the encryption algorithm, available DES, DESede, Blowfish
//keybyte is the encryption key, The length is 24 bytes
//src is the encrypted data buffer (source)
public static byte[] encryptMode(byte[] keybyte, byte[] src) {
try {
//Generate key
SecretKey deskey = new SecretKeySpec(keybyte , Algorithm);
//Encrypted
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(src);
}
catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace ();
}
catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
}
catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
}
//keybyte is the encryption key, the length is 24 words Section
// src is the encrypted buffer
public static byte[] decryptMode(byte[] keybyte, byte[] src) {
try {
//Generate key
SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);
//Decrypt
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
return c1.doFinal(src);
}
catch (java.security.NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
catch (javax.crypto.NoSuchPaddingException e2) {
e2.printStackTrace();
}
catch (java.lang.Exception e3) {
e3.printStackTrace();
}
return null;
}
//Convert into a hexadecimal string
public static String byte2hex(byte[] b) {
String hs=””;
String stmp=””;
for (int n=0;n<b.length;n++) {
stmp=(java.lang.Integer.toHexString(b[ n] &
0XFF )); if (stmp.length()==1) hs=hs+”0″+stmp;
else hs=hs+stmp;
if (n<b.length-1) hs=hs+”:” ;
}
return hs.toUpperCase();
}
public static void main(String[] args){
//Add a new security algorithm, if you use JCE, add it
Security.addProvider(new com.sun.crypto.provider.SunJCE());
final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58,
(byte)0x88, 0x10, 0x40, 0x38, 0x28, 0x25, 0x79, 0x51,
(byte)0xCB, (byte)0xDD, 0x55, 0x66, 0x77, 0x29, 0x74,
(byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2
); //24-byte key
String szSrc = “This is a 3DES test. Test”;
System.out.println(“String before encryption:” + szSrc);
byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
System.out.println( “Encrypted string:” + new String(encoded));
byte[] srcBytes = decryptMode(keyBytes, encoded);
System.out.println(“Decrypted string:” + (new String(srcBytes)) );
}
}