crypto
Encrypt/Decrypt object with DES
This is an example of how to encrypt and decrypt an object with DES. DES in computing refers to the Data Encryption Standard and is supported by Java. To encrypt and decrypt an object with DES you should:
- Create a class to represent the object to be encrypted.
SecretObject
implements Serializable. It has a String property. - Generate a SecretKey using DES algorithm, with the KeyGenerator
generateKey()
API method. - Initialize two Ciphers, one in encryption mode and the other one in decryption mode.
- Create a SealedObject, that enables a programmer to create an object and protect its confidentiality with a cryptographic algorithm. The new sealed object is created using the object and the encryption cipher.
- Use
getAlgorithm()
API method of SealedObject to get the algorithm that was used to seal this object. - Decrypt the sealed object, using
getObject(Cipher c)
API method with the decryption cipher.
Let’s take a look at the code snippet that follows:
package com.javacodegeeks.snippets.core; import java.io.IOException; import java.io.Serializable; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SealedObject; import javax.crypto.SecretKey; public class EncryptDecryptObjectWithDES { private static Cipher ecipher; private static Cipher dcipher; private static SecretKey key; public static void main(String[] args) { try { // generate secret key using DES algorithm key = KeyGenerator.getInstance("DES").generateKey(); ecipher = Cipher.getInstance("DES"); dcipher = Cipher.getInstance("DES"); // initialize the ciphers with the given key ecipher.init(Cipher.ENCRYPT_MODE, key); dcipher.init(Cipher.DECRYPT_MODE, key); // create a sealed object SealedObject sealed = new SealedObject(new SecretObject("My secret message"), ecipher); // get the algorithm with the object has been sealed String algorithm = sealed.getAlgorithm(); System.out.println("Algorithm " + algorithm); // unseal (decrypt) the object SecretObject o = (SecretObject) sealed.getObject(dcipher); System.out.println("Original Object: " + o); } catch (NoSuchAlgorithmException e) { System.out.println("No Such Algorithm:" + e.getMessage()); return; } catch (NoSuchPaddingException e) { System.out.println("No Such Padding:" + e.getMessage()); return; } catch (BadPaddingException e) { System.out.println("Bad Padding:" + e.getMessage()); return; } catch (InvalidKeyException e) { System.out.println("Invalid Key:" + e.getMessage()); return; } catch (IllegalBlockSizeException e) { System.out.println("Illegal Block:" + e.getMessage()); return; } catch (ClassNotFoundException e) { System.out.println("Class Not Found:" + e.getMessage()); return; } catch (IOException e) { System.out.println("I/O Error:" + e.getMessage()); return; } } public static class SecretObject implements Serializable { private static final long serialVersionUID = -1335351770906357695L; private final String message; public SecretObject(String message) { this.message = message; } @Override public String toString() { return "SecretObject [message=" + message + "]"; } } }
Output:
Algorithm DES Original Object: SecretObject [message=My secret message]
This was an example of how to encrypt and decrypt an object with DES in Java.