Java Program for DES Encryption

by J. Orlin Grabbe


This program shows how to use Cryptix to encrypt a string with DES. Background information on DES can be found in:

The DES Algorithm Illustrated

The program listed below, testDES.java:

  • takes the DES key input and a text string (to be encrypted) from the program itself (not from a file),

  • encrypts the string (to produce the ciphertext),

  • writes the key and the ciphertext to a file DES.out,

  • decrypts the ciphertext (still in computer memory), and writes the resulting plaintext string to the file.
  • In this example, we see see the following three numbers:

  • DES key: 3812A419C63BE771

  • Plaintext: 0101010101010101 0102030405060708 090A0B0C0D0E0F10 1112131415161718

  • Ciphertext: 3A2EAD12F475D82C 1FC97BB9A6D955E1 EA5541946BB4F2E6 F29555A6E8F1FB3C

  • Java Source Code

    testDES.java


    import java.io.*;
    import java.security.*;
    import java.math.*;
    import cryptix.util.core.BI;
    import cryptix.util.core.ArrayUtil;
    import cryptix.util.core.Hex;
    import cryptix.provider.key.*;
    
    
    class testDES {
    
    public static void main (String[] args) {
    
    	try {
    	FileOutputStream outFile1 = new FileOutputStream("DES.out");
    	// Note: PrintStream is deprecated, but still works fine in jdk1.1.7b
    	PrintStream output1 = new PrintStream(outFile1);
    
    	// convert a string to a DES key and print out the result
    	RawSecretKey key2 = new RawSecretKey("DES",Hex.fromString("3812A419C63BE771"));
    	RawKey rkey = (RawKey) key2;
    	byte[] yval = rkey.getEncoded();
    	BigInteger Bkey = new BigInteger(yval);
    	String w = cryptix.util.core.BI.dumpString(Bkey);
    	output1.println("The Encryption Key = " + w);
    	
    	// use the DES key to encrypt a string
    	Cipher des=Cipher.getInstance("DES/ECB/NONE","Cryptix");
    	des.initEncrypt(key2);	
    	byte[] ciphertext = des.crypt(Hex.fromString("01010101010101010102030405060708090A0B0C0D0E0F101112131415161718"));
    
    	// print out length and representation of ciphertext 
    	output1.print("\n");
    	output1.println("ciphertext.length = " + ciphertext.length);
    
    	BigInteger Bciph = new BigInteger(ciphertext);
    	w = cryptix.util.core.BI.dumpString(Bciph);
    	output1.println("Ciphertext for DES encryption = " + w);
    	
    	// decrypt ciphertext 
    	des.initDecrypt(key2);
    	ciphertext = des.crypt(ciphertext);
    	output1.print("\n");
    	output1.println("plaintext.length = " + ciphertext.length);
    
    	// print out representation of decrypted ciphertext 
    	Bciph = new BigInteger(ciphertext);
    	w = cryptix.util.core.BI.dumpString(Bciph);
    	output1.println("Plaintext for DES encryption = " + w);
    
    	output1.println(" ");
    	output1.close();		
    
          } catch (Exception e) {
                System.err.println("Caught exception " + e.toString());
          }
    
    	}}
    
    

    Sample Program Output

    DES.out


    The Encryption Key = Multi-Precision Integer 62 bits long...
          sign: Positive
     magnitude: 3812A419C63BE771 
    
    ciphertext.length = 32
    Ciphertext for DES encryption = Multi-Precision Integer 254 bits long...
          sign: Positive
     magnitude: 3A2EAD12F475D82C 1FC97BB9A6D955E1 EA5541946BB4F2E6 F29555A6E8F1FB3C 
    
    plaintext.length = 32
    Plaintext for DES encryption = Multi-Precision Integer 249 bits long...
          sign: Positive
     magnitude: 0101010101010101 0102030405060708 090A0B0C0D0E0F10 1112131415161718 
    


    J. Orlin Grabbe is the author of International Financial Markets, and is an internationally recognized derivatives expert who has recently branched out into cryptology, banking security, and digital cash. His home page is located at http://www.aci.net/kalliste/homepage.html. He currently resides in Costa Rica.

    Click here to return to Encryption Menu