security

DES with CBC example

With this example we are going to demonstrate how to encrypt data using the DES algorithm in CBC mode. In short, to encrypt/decrypt a String message with the Data Encryption Standard algorithm, in Chipher Block Chaining mode you should:

  • Create a byte array to be used as initial input, a byte array to be used as a key and a byte array to be used as initialization vector.
  • Create a new SecretKeySpec, using the key byte array and the DES algorithm.
  • Create a new IvParameterSpec, using the initialization vector byte array.
  • Create a new Cipher for the “DES/CBC/PKCS7Padding” transformation, using an org.bouncycastle.jce.provider.BouncyCastleProvider().
  • Initialize the cipher in encryption mode, using the key and iv specs, with the init(int opmode, Key key, AlgorithmParameterSpec params) API method.
  • Do the encryption. Use the update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) and doFinal(byte[] output, int outputOffset) API methods of the Cipher.
  • Initialize the cipher in decryption mode.
  • Do the decryption, using the same steps as in the encryption.

Let’s take a look at the code snippet that follows:

package com.javacodegeeks.snippets.core;

import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;


public class Main {

    public static void main(String[] args) throws Exception {

  

  Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

  

  byte[] input = "www.javaCODEgeeks.com".getBytes();

  byte[] keyBytes = new byte[]{0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xab, (byte) 0xcd,


(byte) 0xef};

  

  byte[] ivBytes = new byte[]{0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00};


  SecretKeySpec pKey = new SecretKeySpec(keyBytes, "DES");

  IvParameterSpec ivectorSpecv = new IvParameterSpec(ivBytes);

  Cipher c = Cipher.getInstance("DES/CBC/PKCS7Padding", "BC");


  System.out.println("input : " + new String(input));


  // encryption pass


  c.init(Cipher.ENCRYPT_MODE, pKey, ivectorSpecv);


  byte[] encr = new byte;


  int ctLen = c.update(input, 0, input.length, encr, 0);


  ctLen += c.doFinal(encr, ctLen);


  System.out.println("cipher: " + new String(encr).getBytes("UTF-8").toString() + " bytes: " + ctLen);


  // decryption pass


  c.init(Cipher.DECRYPT_MODE, pKey, ivectorSpecv);


  byte[] decrpt = new byte;


  int ptLen = c.update(encr, 0, ctLen, decrpt, 0);


  ptLen += c.doFinal(decrpt, ptLen);


  System.out.println("plain : " + new String(decrpt) + " bytes: " + ptLen);
    }
}

Output:

input : www.javaCODEgeeks.com
cipher: [B@d1dca40 bytes: 24
plain : www.javaCODEgeeks.com

 
This was an example of how to encrypt data using the DES algorithm in CBC mode in Java.

Ilias Tsagklis

Ilias is a software developer turned online entrepreneur. He is co-founder and Executive Editor at Java Code Geeks.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button