CS 4363, Project 1:
Your Own Encryption/Decryption Scheme
Due, 28 February 2003

Project Description:

This project asks you to work on a simple symmetric (conventional) cryptosystem. I am giving you a skeleton Java program below that implements the Caesar cipher on each byte, using a rotation from 0 to 255.

A few hints:

You are welcome to ignore these hints if you want.

What To Hand In:

The items below must appear in what you hand in, numbered the same way and not hand-written, except for the annotations on listings. You should strive for short bulleted items, rather than long boring paragraphs.

  1. The names of the team members.

  2. An overview of the particular encryption scheme used, along with other distinctive features of your system.

  3. Overview documentation about your program.

  4. A clear statement about which parts of the program turned in are working and which parts are not working.

  5. A clear statement about any source code you are using that you did not write yourselves, and any outside help or outside sources you might have used. (These are permissible, as long as credit is given.)

  6. A discussion of additional features you might have inserted into your program if you had had more time.

  7. Source listings.

  8. A listing showing a run, with annotations describing how the given run shows that your program is working, or the extent to which it is working.

Java Code for a Skeleton System:

The first class below (Crypto) just accesses command line arguments (which say whether to encrypt or decrypt, give the key, give the name of the input file, and give the name of the output file), reads the key, opens the files, and creates an instance of the other class that does the work, and invokes a method in that class (transform).

The second class below (Code) actually reads and writes the files, byte-at-a-time. Between reading and writing a byte, it either encodes or decodes the byte, depending on the value of a boolean switch encode. As mentioned before, your main work (in a simple version of the assignment) could be to find more complicated functions to use for the methods encodeByte and decodeByte (but they must be inverses of one another).

Here are the results of a simple run on a Unix box, using the JDK directly. User input is in boldface. Notice that after encoding and decoding, the original file is recovered.


Revision date: 2003-02-11. (Please use ISO 8601, the International Standard.)