Cipher class we just examined, we had to
provide the data to be encrypted or decrypted as multiple blocks of
data. This is not necessarily the best interface for programmers:
what if we want to send and receive arbitrary streams of data over
the network? It would often be inconvenient to get all the data into
buffers before it can be encrypted or decrypted.
The solution to this problem is the ability to associate a cipher object with an input or output stream. When data is written to such an output stream, it is automatically encrypted, and when data is read from such an input stream, it is automatically decrypted. This allows a developer to use Java’s normal semantics of nested filter streams to send and receive encrypted data.
The class that encrypts data on output to a stream is the
Provide a class that will encrypt data as it is written to the underlying stream.
Like all classes that extend the
FilterOutputStream class, constructing a cipher
output stream requires that an existing output stream has already
been created. This allows us to use the existing output stream from a
socket or a file as the destination stream for the encrypted data:
Create a cipher output stream, associating the given cipher object with the existing output stream. The ...