1  import java.io.InputStream;
  2  import java.io.OutputStream;
  3  import java.io.IOException;
  4  
  5  /**
  6     This class encrypts files using the Caesar cipher.
  7     For decryption, use an encryptor whose key is the 
  8     negative of the encryption key.
  9  */
 10  public class CaesarCipher
 11  {
 12     private int key;
 13  
 14     /**
 15        Constructs a cipher object with a given key.
 16        @param aKey the encryption key
 17     */
 18     public CaesarCipher(int aKey)
 19     {
 20        key = aKey;
 21     }
 22  
 23     /**
 24        Encrypts the contents of a stream.
 25        @param in the input stream
 26        @param out the output stream
 27     */      
 28     public void encryptStream(InputStream in, OutputStream out)
 29           throws IOException
 30     {
 31        boolean done = false;
 32        while (!done)
 33        {
 34           int next = in.read();
 35           if (next == -1) 
 36           { 
 37              done = true; 
 38           }
 39           else
 40           {
 41              int encrypted = encrypt(next);
 42              out.write(encrypted);
 43           }
 44        }
 45     }
 46  
 47     /**
 48        Encrypts a value.
 49        @param b the value to encrypt (between 0 and 255)
 50        @return the encrypted value
 51     */
 52     public int encrypt(int b)
 53     {
 54        return (b + key) % 256;
 55     }
 56  }