AMETAS.cipher
Class CipherOutputStream

java.lang.Object
  extended byjava.io.OutputStream
      extended byAMETAS.cipher.CipherOutputStream

public class CipherOutputStream
extends java.io.OutputStream

Ausgabestrom mit kryptographischer Funktionalität. Bietet kryptografische Methoden in einer Stromklasse. Alle Methoden der Superklasse sind überschrieben. Dieser Datenstrom kann einfach in eine Stromkette zwischengeschaltet werden und auch außerhalb AMETAS Einsatz finden.

Beispiel:

            symCipher = SymmetricCipher.getInstance("AMETASSC");
                symCipher.setKey(sMantra);
            oos = new ObjectOutputStream(new CipherOutputStream(cryptedOutputStream, symCipher));
        

See Also:
Cipher, SymmetricCipher, AsymmetricCipher, AMETASSC, RSA

Field Summary
static int DECRYPTION_MODE
          Entschlüsselungsmodus.
static int ENCRYPT_AT_ONCE
          Modus, der bewirkt, dass die Bytemenge beim Schreiben auf Blockgröße aufgefüllt wird.
static int ENCRYPTION_MODE
          Verschlüsselungsmodus.
protected  byte[] m_abyBuffer
          Dient zur Speicherung von ver- oder entschlüsselten Daten.
 boolean m_bDebug
          Wenn true, werden Detailmeldungen ausgegeben.
protected  Cipher m_CipherAlg
          Instanz eines symmetrischen Verschlüsselungsalgorithmus.
protected  int m_nBufferPointer
          Zeiger auf die Stelle im Puffer m_abyBuffer.
protected  int m_nMode
          Modus.
protected  int m_nWriteMode
          Anzahl der Bytes, die gepuffert werden, bis sie als Block verschlüsselt werden.
static int NEUTRAL_MODE
          Neutraler Modus.
 
Constructor Summary
CipherOutputStream(java.io.OutputStream osOut, Cipher cipher)
          Konstruktor.
CipherOutputStream(java.io.OutputStream osOut, Cipher cipher, int nMode)
          Konstruktor.
 
Method Summary
 void close()
          Schließt den Strom.
 void flush()
          Leert den Strom.
 void setWriteMode(int nWriteMode)
          Setzen des Schreibmodus.
 void write(byte[] b)
          Schreibt ein Bytefeld in den Strom.
 void write(byte[] b, int off, int len)
          Schreibt ein Bytefeld in den Strom.
 void write(int b)
          Schreibt ein Byte in den Strom.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_CipherAlg

protected Cipher m_CipherAlg
Instanz eines symmetrischen Verschlüsselungsalgorithmus. Bei der Ver-/Entschlüsselung benutzt der Strom diesen Algorithmus.


ENCRYPTION_MODE

public static final int ENCRYPTION_MODE
Verschlüsselungsmodus. Die Daten werden im Klartext in den Strom geschrieben, welcher die Daten chiffriert an den unterliegenden Ausgabestrom weitergibt.

See Also:
Constant Field Values

DECRYPTION_MODE

public static final int DECRYPTION_MODE
Entschlüsselungsmodus. Die Daten werden chiffriert in den Strom geschrieben, welcher die Daten dechiffriert an den unterliegenden Ausgabestrom weitergibt.

See Also:
Constant Field Values

NEUTRAL_MODE

public static final int NEUTRAL_MODE
Neutraler Modus. Es findet weder Ver- noch Entschlüsselung statt. Das Verhalten ist wie bei einem normalen Ausgabestrom.

See Also:
Constant Field Values

ENCRYPT_AT_ONCE

public static final int ENCRYPT_AT_ONCE
Modus, der bewirkt, dass die Bytemenge beim Schreiben auf Blockgröße aufgefüllt wird. Dies hat den Vorteil, dass beim Schreiben eines Bytes dieses sofort als verschlüsselter Block zur Verfügung steht. Falls jedoch n Bytes nacheinander mit der Methode write(int) verschlüsselt werden, dann ist dies zeitaufwendig und die Anzahl der Zeichen wird auf n*Blockgröße aufgebläht.

See Also:
Constant Field Values

m_nWriteMode

protected int m_nWriteMode
Anzahl der Bytes, die gepuffert werden, bis sie als Block verschlüsselt werden. Vorgabe ist ENCRYPT_AT_ONCE.


m_nMode

protected int m_nMode
Modus. Mögliche Werte: ENCRYPTIONMODE, DECRYPTIONMODE, NEUTRALMODE.


m_abyBuffer

protected byte[] m_abyBuffer
Dient zur Speicherung von ver- oder entschlüsselten Daten.


m_nBufferPointer

protected int m_nBufferPointer
Zeiger auf die Stelle im Puffer m_abyBuffer.


m_bDebug

public boolean m_bDebug
Wenn true, werden Detailmeldungen ausgegeben.

Constructor Detail

CipherOutputStream

public CipherOutputStream(java.io.OutputStream osOut,
                          Cipher cipher)
                   throws java.io.IOException
Konstruktor. Der Strom wird mit dem Parameter ENCRYPTION_MODE initialisiert.

Parameters:
osOut - Eigentlicher OutputStream, mit dem gearbeitet wird.
cipher - Symmetrischer Verschlüsselungsalgorithmus.
Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.

CipherOutputStream

public CipherOutputStream(java.io.OutputStream osOut,
                          Cipher cipher,
                          int nMode)
                   throws java.io.IOException
Konstruktor.

Parameters:
osOut - Eigentlicher OutputStream, mit dem gearbeitet wird.
cipher - Symmetrischer Verschlüsselungsalgorithmus.
nMode - Modus, der folgende Werte annehmen darf: ENCRYPTION_MODE, DECRYPTION_MODE, NEUTRAL_MODE.
Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.
Method Detail

setWriteMode

public void setWriteMode(int nWriteMode)
Setzen des Schreibmodus. Wird eine Konstannte ENCRYPT_AT_ONCE übergeben, so wird sofort verschlüsselt, andernfalls werden die verschlüsselten Bytes in dem Strom geschrieben, falls flush aufgerufen wird oder die Anzahl nWriteMode an zu verschlüsselden Bytes erreicht ist.

Parameters:
nWriteMode - ENCRYPT_AT_ONCE oder Anzahl der Bytes, die gepuffert werden sollen, bis die Ausgabe geschieht.

write

public void write(int b)
           throws java.io.IOException
Schreibt ein Byte in den Strom. Je nach Modus hat dies verschiedene Folgen:
  1. DECRYPTION_MODE: Erst wenn m_nBlocksizeCipher viele Bytes gepuffert sind, kann der Block entschlüsselt werden.
  2. ENCRYPTION_MODE: Je nach Schreibmodus wird das Byte sofort auf Blockgröße aufgefüllt (ENCRYPT_AT_ONCE) und verschlüsselt in den zugrundelegenden Stream geschrieben oder es wird in einen Puffer geschrieben, der bei Erreichen der Größe verschlüsselt wird.
  3. NEUTRAL_MODE: das Byte wird in den zugrunde liegenden Stream geschrieben.
Das Schreiben eines Bytes kann sich folglich erst später im eigentlichen Strom auswirken und außerdem kann es dazu führen, dass mehrere Bytes in den Strom geschrieben werden.

Parameters:
b - Byte, das geschrieben werden soll.
Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.

write

public void write(byte[] b)
           throws java.io.IOException
Schreibt ein Bytefeld in den Strom. Je nach Modus hat dies verschiedene Folgen:
  1. DECRYPTION_MODE: Erst wenn m_nBlocksizeCipher viele Bytes gepuffert sind, kann der Block entschlüsselt werden. Überzählige Bytes aus dem Feld werden gepuffert.
  2. ENCRYPTION_MODE: Je nach Schreibmodus wird das Byte sofort auf Blockgröße aufgefüllt (ENCRYPT_AT_ONCE) und verschlüsselt in den zugrundelegenden Stream geschrieben oder es wird in einen Puffer geschrieben, der bei Erreichen der Größe verschlüsselt wird.
  3. NEUTRAL_MODE: das Bytefeld wird in den zugrunde liegenden Stream geschrieben.
Das Schreiben des Bytefelds kann sich folglich erst später im eigentlichen Strom auswirken und außerdem kann es dazu führen, dass weitere Bytes in den Strom geschrieben werden.

Parameters:
b - Bytefeld, das geschrieben werden soll.
Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.

write

public void write(byte[] b,
                  int off,
                  int len)
           throws java.io.IOException
Schreibt ein Bytefeld in den Strom. Je nach Modus hat dies verschiedene Folgen:
  1. DECRYPTION_MODE: Erst wenn m_nBlocksizeCipher viele Bytes gepuffert sind, kann der Block entschlüsselt werden. Überzählige Bytes aus dem Feld werden gepuffert.
  2. ENCRYPTION_MODE: Je nach Schreibmodus wird das Byte sofort auf Blockgröße aufgefüllt (ENCRYPT_AT_ONCE) und verschlüsselt in den zugrundelegenden Stream geschrieben oder es wird in einen Puffer geschrieben, der bei Erreichen der Größe verschlüsselt wird.
  3. NEUTRAL_MODE: das Bytefeld wird in den zugrunde liegenden Stream geschrieben.
Das Schreiben des Bytefelds kann sich folglich erst später im eigentlichen Strom auswirken und außerdem kann es dazu führen, dass weitere Bytes in den Strom geschrieben werden.

Parameters:
b - ByteArray, das geschrieben werden soll.
off - Position, ab wo die Bytes geschrieben werden.
len - Anzahl zu schreibender Bytes.
Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.

flush

public void flush()
           throws java.io.IOException
Leert den Strom. Je nach Modus hat dies verschiedene Folgen:
  1. DECRYPTION_MODE: Aufruf dieser Methode auf dem zugrunde liegenden Strom.
  2. ENCRYPTION_MODE: Je nach Schreibmodus wird nur die flush-Methode auf dem zugrunde liegenden Strom aufgerufen (ENCRYPT_AT_ONCE) oder die restlichen Bytes aus dem Puffer werden verschlüsselt und geschrieben und dann die flush-Methode auf dem zugrunde liegenden Strom aufgerufen.
  3. NEUTRAL_MODE: Aufruf dieser Methode auf dem zugrunde liegenden Stream.

Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.

close

public void close()
           throws java.io.IOException
Schließt den Strom. Falls im Verschlüsselungsmodus noch Bytes im Puffer sind, werden diese noch verschlüsselt und geschrieben.

Throws:
java.io.IOException - wenn es zu Schreibproblemen im unterliegenden Strom kam oder Ver-/Entschlüsselungsprobleme vorliegen.