Implementation of Shift Cipher

// CSci 4509 Shift Cipher implementation
// Elena Machkasova, 1/19/05

public class ShiftCipher {
    public static void main(String[] args) {
	// testing mod
	/*
	System.out.println(mod(7, 3));
	System.out.println(mod(-7, 3));
	System.out.println(mod(-101, 7));
	*/

	if (args.length < 3) {
	    System.out.println("Usage: java ShiftCipher mode key message");
	    System.out.println("mode: e for encrypt. d for decrypt");
	    System.out.println("key: an integer key <= 25");
	    System.out.println("message: the message to encrypt or decrypt");
	    System.exit(0);
	}

	int key = (new Integer(args[1])).intValue();
	if (key < 0 || key > 25) {
	    System.out.println("Illegal key value " + key);
	    System.exit(0);
	}
	
	if (args[0].equals("e") || args[0].equals("E")) {
	    // encrypting
	    System.out.println(encrypt(args[2],key));
	} else if (args[0].equals("d") || args[0].equals("D")) {
	    // decrypting
	    System.out.println(decrypt(args[2],key));
	} else {
	    System.out.println("the first argument must be e or d");
	    System.exit(0);
	}
	
    }

    // computes n mod m defined as the smallest
    // non-negative integer r such that n = k * m + r, 
    // where k is an integer 
    // Assume that m > 0
    public static int mod(int n, int m) {
	int r = n % m;
	if (r < 0) r = r + m;
	return r;
    }

    // assume that the key is valid
    public static String encrypt(String plaintext, int key) {
	int length = plaintext.length();
	StringBuffer ciphertext = new StringBuffer();
	for (int i = 0; i < length; ++i) {
	    char letter = plaintext.charAt(i);
	    if (!Character.isLetter(letter)) {
		System.out.println("Illegal character " + letter);
		System.exit(0);
	    }
	    int position = -1;
	    if (Character.isUpperCase(letter)) {
		position = letter - 'A';
	    }
	    else if (Character.isLowerCase(letter)) {
		position = letter - 'a';
	    }
	    int cipherposition = mod(position + key, 26);
	    //System.out.println(cipherposition);
	    ciphertext.append((char) ('A' + cipherposition));
	}
	return ciphertext.toString();
    }

        // assume that the key is valid
    public static String decrypt(String ciphertext, int key) {
	int length = ciphertext.length();
	StringBuffer plaintext = new StringBuffer();
	for (int i = 0; i < length; ++i) {
	    char letter = ciphertext.charAt(i);
	    if (!Character.isLetter(letter)) {
		System.out.println("Illegal character " + letter);
		System.exit(0);
	    }
	    int position = -1;
	    if (Character.isUpperCase(letter)) {
		position = letter - 'A';
	    }
	    else if (Character.isLowerCase(letter)) {
		position = letter - 'a';
	    }
	    int plainposition = mod(position - key, 26);
	    //System.out.println(plainposition);
	    plaintext.append((char) ('A' + plainposition));
	}
	return plaintext.toString();
    }
}

The course main page.