JCE Encryption – Data Encryption Standard (DES) Tutorial

In this article, we show you how to use Java Cryptography Extension (JCE) to encrypt or decrypt a text via Data Encryption Standard (DES) mechanism.

1. DES Key

Create a DES Key.


    KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
    SecretKey myDesKey = keygenerator.generateKey();

2. Cipher Info

Create a Cipher instance from Cipher class, specify the following information and separated by a slash (/).

  • Algorithm name
  • Mode (optional)
  • Padding scheme (optional)

    Cipher desCipher;
    // Create the cipher 
    desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
Note
DES = Data Encryption Standard.
ECB = Electronic Codebook mode.
PKCS5Padding = PKCS #5-style padding.

In this case, you created a DES (Data Encryption Standard) cipher in Electronic Codebook mode, with PKCS #5-style padding.

3. Convert It

Convert String into Byte[] array format.


    byte[] text = "No body can see me".getBytes();

4. Encrypt It

Make Cipher in encrypt mode, and encrypt it with Cipher.doFinal() method.


    desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
    byte[] textEncrypted = desCipher.doFinal(text);

5. Decrypt It

Make Cipher in decrypt mode, and decrypt it with Cipher.doFinal() method as well.


    desCipher.init(Cipher.DECRYPT_MODE, myDesKey);
    byte[] textDecrypted = desCipher.doFinal(textEncrypted);

6. Full Example

Full Example to show how to use Java’s JCE to encrypt and decrypt text in DES mechanism.


package com.mkyong.util;

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.SecretKey;

public class JEncrytion
{    
	public static void main(String[] argv) {
		
		try{

		    KeyGenerator keygenerator = KeyGenerator.getInstance("DES");
		    SecretKey myDesKey = keygenerator.generateKey();
		    
		    Cipher desCipher;

		    // Create the cipher 
		    desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
		    
		    // Initialize the cipher for encryption
		    desCipher.init(Cipher.ENCRYPT_MODE, myDesKey);

		    //sensitive information
		    byte[] text = "No body can see me".getBytes();

		    System.out.println("Text [Byte Format] : " + text);
		    System.out.println("Text : " + new String(text));
		   
		    // Encrypt the text
		    byte[] textEncrypted = desCipher.doFinal(text);

		    System.out.println("Text Encryted : " + textEncrypted);
		    
		    // Initialize the same cipher for decryption
		    desCipher.init(Cipher.DECRYPT_MODE, myDesKey);

		    // Decrypt the text
		    byte[] textDecrypted = desCipher.doFinal(textEncrypted);
		    
		    System.out.println("Text Decryted : " + new String(textDecrypted));
		    
		}catch(NoSuchAlgorithmException e){
			e.printStackTrace();
		}catch(NoSuchPaddingException e){
			e.printStackTrace();
		}catch(InvalidKeyException e){
			e.printStackTrace();
		}catch(IllegalBlockSizeException e){
			e.printStackTrace();
		}catch(BadPaddingException e){
			e.printStackTrace();
		} 
	   
	}
}

Output


Text [Byte Format] : [B@19b5393
Text : No body can see me
Text Encryted : [B@4e79f1
Text Decryted : No body can see me

Reference

  1. JavaTM Cryptography Architecture – http://java.sun.com/j2se/1.5.0/docs/guide/security/CryptoSpec.html

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Jatin Ghataliya
Guest
Jatin Ghataliya

while i am gone decrypt the string i got following exception :

Exception : while decryption : javax.crypto.BadPaddingException: Given final block not properly padded

AVINASH MISHRA
Guest
AVINASH MISHRA

What if I want the user to enter their own key while encryption and use that key to decrypt?

Patrick
Guest
Patrick

Really helpful thanks :)

DavisJozk
Guest
DavisJozk

Simple and cool
Keep it up!

samasim
Guest
samasim

what type of algorithm did you use ?

Michael Balanov
Guest
Michael Balanov

Thanks a lot for the article. Can you please tell how I can save and then restore generated key? I need to save it in file or hardcoded constant.

Michael Balanov
Guest
Michael Balanov

I’ve just found an answer. )

// save key
byte[] key = myDesKey.getEncoded();

// restore key
myDesKey = new SecretKeySpec(key, “DES”);

RR
Guest
RR

Hi, thanks for your sample code.
I’m not sure what if I would like to change key, if I change this
KeyGenerator.getInstance(“DES”);

to this
KeyGenerator.getInstance(“ThisIsMyKey”);

Is that right way to use my own key ?

Thank you~

Shankar Kumara
Guest
Shankar Kumara

@mkyoung
This example gives encrypt and decrypt using standards.
I have to encrypt using public certificate and decrypt using private certificate.

Will you be able to provide sample fo the above?

peter
Guest
peter

nice post.. but i got error javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

peter
Guest
peter

javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

peter
Guest
peter

Hi nice post, but i need separate method encryption and decryption but i got error like “javax.crypto.IllegalBlockSizeException: last block incomplete in decryption” pl.help on this

saba
Guest
saba

it s veryusefull

saba
Guest
saba

it’s vey usefull….. thanks lot

Srinivasa HP
Guest
Srinivasa HP

I need to know how to do encyption at the server side (JAX-rs service). well, i was able to do but the size of the byte is getting increased from 128 to 638 due to which i am unable to decrypt. Pls help me in this regard

BINOY KUMAR BARANWAL
Guest
BINOY KUMAR BARANWAL

This program is excellent. Now I came to know why Java is so powerful. Thanks…..

Ivan S. Acog
Guest
Ivan S. Acog

this post was vary helpful.. thank you

Ganda
Guest
Ganda

Thanks for information, can l reguest your program complete?
because theprogram important for me to help mystudy.
thank you very much….

skvmb
Guest
skvmb

Thank you for this post. Very helpful information.

Kevin
Guest
Kevin

pretty cool!

Hari Shankar Maurya
Guest
Hari Shankar Maurya

This Example is so helpful to me.can u give some example or link which are provided by another third party tool used in java or more effextive than this java cryptography….do u think this is enough for data security.

WhatsInName
Guest
WhatsInName

Not useful with Updated Java version. Kindly update your tutorial.