Encrypting a String with DES

This example implements a class for encrypting and decrypting strings using DES. The class is created with a key and can be used repeatedly to encrypt and decrypt strings using that key.
public class DesEncrypter { Cipher ecipher; Cipher dcipher; DesEncrypter(SecretKey key) { try { ecipher = Cipher.getInstance("DES"); dcipher = Cipher.getInstance("DES"); ecipher.init(Cipher.ENCRYPT_MODE, key); dcipher.init(Cipher.DECRYPT_MODE, key); } catch (javax.crypto.NoSuchPaddingException e) { } catch (java.security.NoSuchAlgorithmException e) { } catch (java.security.InvalidKeyException e) { } } public String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } public String decrypt(String str) { try { // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8"); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } }
Here's an example that uses the class:
try { // Generate a temporary key. In practice, you would save this key. // See also Encrypting with DES Using a Pass Phrase. SecretKey key = KeyGenerator.getInstance("DES").generateKey(); // Create encrypter/decrypter class DesEncrypter encrypter = new DesEncrypter(key); // Encrypt String encrypted = encrypter.encrypt("Don't tell anybody!"); // Decrypt String decrypted = encrypter.decrypt(encrypted); } catch (Exception e) { }

Comments

18 Feb 2010 - 3:26am by Allan Dsouza (not verified)

nice code! didnt run on my PC!

3 Mar 2010 - 1:38pm by Nishanth (not verified)

Got it working, thanks for the code

@Allan Dsouzaa: hey just add these import statements at the beginning to get it running.

import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.spec.*;
import java.io.*;

13 Mar 2010 - 12:50am by Vikash Chaurasia (not verified)

Hi,

Your snippet of code looks nice for me for my requirement. But when I am getting two compilation errors in this class: sun.misc.BASE64Decoder().decodeBuffer(str), sun.misc.BASE64Encoder().encode(enc). The reason is the rt.jar is not having these methods in the corresponding classes.

Please suggest.

16 Mar 2010 - 8:16pm by Navin (not verified)

If you are using Eclipse do the following steps
1. Open project properties.
2. Select Java Build Path node.
3. Select Libraries tab.
4. Remove JRE System Library.
5. Add Library JRE System Library.
6. Select workspace default library

17 Mar 2010 - 8:31am by Gordon (not verified)

Thanks,

This is a brilliant code, but is it possible to amend the code to demostrate how to save the key for future use.

18 Mar 2010 - 1:58am by Prathap (not verified)

I tried this but it shows IlligalBlockSizeException while decrypting it. i used this module in my chat application which uses thread concept. can you help on this issue?.

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.