crypto
Encrypt/Decrypt string with DES
In this example we shall show you how to encrypt and decrypt a String with DES. DES in computing refers to the Data Encryption Standard and is supported by Java. To encrypt and decrypt a String with DES one should perform the following steps:
- 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. Use them to encrypt the String message and then decrypt the encrypted String.
- The encryption is performed in the
String encrypt(String str)
method. It encodes the string into a sequence of bytes using the named charset, storing the result into a new byte array. Then it callsdoFinal(byte[] input)
API method of Cipher to make the encryption. It uses thecom.sun.mail.util.BASE64EncoderStream
to encode the encrypted byte array and returns the String created from the byte array. - The decryption is performed in the
String decrypt(String str)
method. It uses thecom.sun.mail.util.BASE64DecoderStream
to decode the String to byte array. Then it callsdoFinal(byte[] input)
API method of Cipher to make the decryption. It creates a new string based on the specified charset from the decrypted byte array,
as described in the code snippet below.
package com.javacodegeeks.snippets.core; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import com.sun.mail.util.BASE64DecoderStream; import com.sun.mail.util.BASE64EncoderStream; public class EncryptDecryptStringWithDES { 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); String encrypted = encrypt("This is a classified message!"); String decrypted = decrypt(encrypted); System.out.println("Decrypted: " + decrypted); } 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 (InvalidKeyException e) { System.out.println("Invalid Key:" + e.getMessage()); return; } } public static String encrypt(String str) { try { // encode the string into a sequence of bytes using the named charset // storing the result into a new byte array. byte[] utf8 = str.getBytes("UTF8"); byte[] enc = ecipher.doFinal(utf8); // encode to base64 enc = BASE64EncoderStream.encode(enc); return new String(enc); } catch (Exception e) { e.printStackTrace(); } return null; } public static String decrypt(String str) { try { // decode with base64 to get bytes byte[] dec = BASE64DecoderStream.decode(str.getBytes()); byte[] utf8 = dcipher.doFinal(dec); // create new string based on the specified charset return new String(utf8, "UTF8"); } catch (Exception e) { e.printStackTrace(); } return null; } }
Output:
Decrypted: This is a classified message!
This was an example of how to encrypt and decrypt a String with DES in Java.
Thanks! Old article, still relevant. Just needs a few updates: import java.util.Base64; public static String encrypt(String str) { try { // encode the string into a sequence of bytes using the named charset // storing the result into a new byte array. byte[] utf8 = str.getBytes(“UTF8”); byte[] enc = ecipher.doFinal(utf8); // encode to base64 String encString = new String(Base64.getEncoder().encodeToString(enc)); return new String(encString); } catch (Exception e) { e.printStackTrace(); } return null; } public static String decrypt(String str) { try { // decode with base64 to get bytes byte[] dec = Base64.getDecoder().decode(str.getBytes()); byte[] utf8 = dcipher.doFinal(dec); // create new string based… Read more »