j-orlin-grabbe

Java Program for DES Encryption

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 
    

     

    Encryption Menu

    The Digital Monetary Trust, Part 1.

    The Digital Monetary Trust, Part 2.

    The DMT Rand.

    DMT Employment Opportunities.

    DMT Investment Opportunities.

     

    orlin-grabbe-dot-com