AMETAS.cipher
Class Cipher

java.lang.Object
  extended byAMETAS.cipher.Cipher
Direct Known Subclasses:
AsymmetricCipher, SymmetricCipher

public abstract class Cipher
extends java.lang.Object

Abstrakte Basisklasse für Verschlüsselungsalgorithmen. In ihr sind alle notwendigen Methoden implementiert, die für die Ver/Entschlüsselung gebraucht werden.


Field Summary
static int CBC
          Cipher Back Chaining Modus.
static int ECB
          Eletronic Codebook Modus.
protected  byte[] m_abCBCBuffer
          Initialisierungsvektor für CBC-Modus.
protected  boolean m_bDebug
          Zum Anzeigen/Verbergen von Debuginformationen.
 
Constructor Summary
Cipher(java.lang.String sAlgorithm)
          Erzeugt ein neues Verschlüsselungsobjekt.
 
Method Summary
abstract  int blocksize()
          Blockgröße des Verschlüsselungsalgorithmus.
abstract  int blocksizeCipher()
          Blockgröße des Verschlüsselungsalgorithmus.
 byte[] decrypt(byte[] abCipher)
          Entschlüsselung eines Bytefelds.
 byte[] decrypt(byte[] abCipher, boolean bUndoBlockAdaption)
          Entschlüsselung des Arrays.
 void decrypt(byte[] abCipher, int nBegin, byte[] abPlain, int nPlainOffset, int nNumber, boolean bUndoBlockAdaptation)
          Entschlüsselt einen Bereich eines Bytefelds.
 byte[] decrypt(byte[] abCipher, int nBegin, int nNumber, boolean bUndoBlockAdaptation)
          Entschlüsselt einen Bereich eines Bytefelds.
abstract  void decryptBlock(byte[] abBlockCipher, int nOffsetCipher, byte[] abBlockPlain, int nOffsetPlain)
          Entschlüsselt einen Bereich eines Bytefelds.
 byte[] doBlockAdaptation(byte[] abBytes)
          Gleicht ein zu verschlüsselndes Bytearray an ein Vielfaches der Blockgröße an.
 byte[] encrypt(byte[] abPlain)
          Verschlüsselung des Arrays.
 byte[] encrypt(byte[] abPlain, boolean bDoBlockAdaption)
          Verschlüsselung des Arrays.
 byte[] encrypt(byte[] abPlain, int nBegin, int nNumber, boolean bDoBlockAdaptation)
          Verschlüsselt einen Bereich eines Feldes.
 void encrypt(byte[] abPlain, int nBegin, int nNumber, byte[] abCipher, int nCipherOffset, boolean bDoBlockAdaptation)
          Verschlüsselt einen Bereich eines Feldes.
abstract  void encryptBlock(byte[] abBlockPlain, int nOffsetPlain, byte[] abBlockCipher, int nOffsetCipher)
          Verschlüsselt einen Bereich eines Bytefelds.
 java.lang.String getAlgorithm()
          Liefert den Namen des Algorithmus.
static Cipher getCipherInstance(java.lang.String sAlgorithm)
          Liefert eine Instanz eines Verschlüsselungsalgorithmus.
static Cipher getCipherInstance(java.lang.String sAlgorithm, java.lang.String sProvider)
          Liefert eine Instanz eines Verschlüsselungsalgorithmus.
 int getMode()
          Der Ver/Entschlüsselungs-Modus.
 int getNumberOfBytes(byte[] abBytes)
          Liefert die Anzahl der aufgefüllten Bytes.
 void setDebug(boolean bDebug)
          Zum Setzen/Löschen des Debug-Flags.
abstract  void setKey(java.security.Key key)
          Setzt den Schlüssel.
 boolean setMode(int nMode, byte[] abInit)
          Legt den Modus fest.
 byte[] undoAdaptation(byte[] abBytes)
          Entfernt Auffüllung.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_bDebug

protected boolean m_bDebug
Zum Anzeigen/Verbergen von Debuginformationen.


m_abCBCBuffer

protected byte[] m_abCBCBuffer
Initialisierungsvektor für CBC-Modus.


ECB

public static final int ECB
Eletronic Codebook Modus. Jeder Block wird unabhängig von anderen verschlüsselt.

See Also:
Constant Field Values

CBC

public static final int CBC
Cipher Back Chaining Modus.

See Also:
Constant Field Values
Constructor Detail

Cipher

public Cipher(java.lang.String sAlgorithm)
Erzeugt ein neues Verschlüsselungsobjekt. Der Name des Algorithmus sollte gemäß den Richtlinien der Java Cryptography Architecture API gewählt sein.

Parameters:
sAlgorithm - Name des Algorithmus.
Method Detail

setMode

public boolean setMode(int nMode,
                       byte[] abInit)
Legt den Modus fest.

Parameters:
nMode - ECB oder CBC.
abInit - Initialisierungsfeld. Muss nur ungleich null sein, falls der CBC-Modus verwendet wird. Dann muss das Array der Blockgröße des Algorithmus entsprechen. Ansonsten wird ein Nullvektor genommen.
Returns:
true, wenn der Modus gesetzt werden konnte.

setDebug

public void setDebug(boolean bDebug)
Zum Setzen/Löschen des Debug-Flags.

Parameters:
bDebug - wenn true, werden Debug-Meldungen ausgegeben.

getMode

public int getMode()
Der Ver/Entschlüsselungs-Modus.

Returns:
ECB oder CBC.

getAlgorithm

public java.lang.String getAlgorithm()
Liefert den Namen des Algorithmus.

Returns:
Name.

getCipherInstance

public static Cipher getCipherInstance(java.lang.String sAlgorithm)
                                throws java.security.NoSuchAlgorithmException
Liefert eine Instanz eines Verschlüsselungsalgorithmus. Diese Methode ist konform zum Provider/Engine-Konzept von Java.

Parameters:
sAlgorithm - Name des Algorithmus. Spezifikation siehe Java Cryptography Architecture API Specification and Reference.
Returns:
Instanz des gesuchten Algorithmus.
Throws:
java.security.NoSuchAlgorithmException - wenn der Algorithmus nicht gefunden oder instantiiert werden konnte.

getCipherInstance

public static Cipher getCipherInstance(java.lang.String sAlgorithm,
                                       java.lang.String sProvider)
                                throws java.security.NoSuchAlgorithmException,
                                       java.security.NoSuchProviderException
Liefert eine Instanz eines Verschlüsselungsalgorithmus. Diese Methode ist konform zum Provider/Engine-Konzept von Java.

Parameters:
sAlgorithm - Name des Algorithmus. Spezifikation siehe Java Cryptography Architecture API Specification and Reference.
sProvider - Provider, in unserem Fall gibt es nur AMETAS und SUN.
Returns:
Instanz des gesuchten Algorithmus
Throws:
java.security.NoSuchAlgorithmException - wenn der Algorithmus nicht gefunden oder instantiiert werden konnte.
java.security.NoSuchProviderException - wenn der Provider nicht gefunden wurde.

blocksize

public abstract int blocksize()
Blockgröße des Verschlüsselungsalgorithmus. Diese Methode muss vom Verschlüsselungsalgorithmus implementiert werden. Die Angabe bezieht sich auf die Blockgröße des unverschlüsselten Textes.

Returns:
Blockgröße (in Bytes) des Verschlüsselungsalgorithmus.

blocksizeCipher

public abstract int blocksizeCipher()
Blockgröße des Verschlüsselungsalgorithmus. Diese Methode muss vom Verschlüsselungsalgorithmus implementiert werden. Die Angabe bezieht sich auf die Blockgröße des verschlüsselten Textes. Diese Blockgröße kann, muss aber nicht von der Blockgrösse des unverschlüsselten Textes abweichen.

Returns:
Blockgröße (in Bytes) des Verschlüsselungsalgorithmus.

setKey

public abstract void setKey(java.security.Key key)
                     throws java.security.InvalidKeyException
Setzt den Schlüssel. Diese Methode muss vom Verschlüsselungsalgorithmus implementiert werden.

Parameters:
key - Schlüssel.
Throws:
java.security.InvalidKeyException - falls der Schlüssel fehlerhaft ist.

encryptBlock

public abstract void encryptBlock(byte[] abBlockPlain,
                                  int nOffsetPlain,
                                  byte[] abBlockCipher,
                                  int nOffsetCipher)
                           throws CipherException
Verschlüsselt einen Bereich eines Bytefelds. Die Verschlüsselung beginnt im Array abBlockPlain an der Position nOffsetPlain über blocksize viele Bytes und kopiert die verschlüsselten Bytes in das Array abBlockCipher an die Stelle nOffsetCipher. Diese Methode muss vom Verschlüsselungsalgorithmus implementiert werden. Achtung: Der Platz, der im CipherArray für die Daten gebraucht wird, beträgt blocksizeCipher.

Parameters:
abBlockPlain - Zu verschlüsselndes Bytearray.
nOffsetPlain - Position, ab der die Verschlüsselung beginnen soll.
abBlockCipher - Feld, in das der verschlüsselte Block kopiert werden soll.
nOffsetCipher - Die Position im Array, wohin der verschlüsselte Block kopiert werden soll.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

decryptBlock

public abstract void decryptBlock(byte[] abBlockCipher,
                                  int nOffsetCipher,
                                  byte[] abBlockPlain,
                                  int nOffsetPlain)
                           throws CipherException
Entschlüsselt einen Bereich eines Bytefelds. Diese Methode entschlüsselt beginnend im Array abBlockCipher an der Position nOffsetCipher blocksizeCipher viele Bytes und kopiert die entschlüsselten Bytes in das Array abBlockPlain an die Stelle nOffsetPlain. Diese Methode muss vom Verschlüsselungsalgorithmus implementiert werden. Der Platz, der in dem PlainArray für die Daten gebraucht wird, beträgt blocksize.

Parameters:
abBlockCipher - Das zu entschlüsselnde Bytearray.
nOffsetCipher - Position ab der die Entschlüsselung beginnen soll.
abBlockPlain - Das Array, in das der entschlüsselte Block kopiert werden soll.
nOffsetPlain - Die Position im Array, wo der entschlüsselte Block kopiert werden soll.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

doBlockAdaptation

public byte[] doBlockAdaptation(byte[] abBytes)
Gleicht ein zu verschlüsselndes Bytearray an ein Vielfaches der Blockgröße an.

Parameters:
abBytes - Anzupassendes Bytearray.
Returns:
Das der Blockgröße angepasste Bytearray.

undoAdaptation

public byte[] undoAdaptation(byte[] abBytes)
Entfernt Auffüllung. Das Bytefeld muss unverschlüsselt sein.

Parameters:
abBytes - Zu bearbeitendes Bytearray.
Returns:
Originalfeld ohne aufgefüllten Bytes.

getNumberOfBytes

public int getNumberOfBytes(byte[] abBytes)
                     throws CipherException
Liefert die Anzahl der aufgefüllten Bytes.

Parameters:
abBytes - Auf Blockgröße angepasstes Bytearray.
Returns:
Anzahl der aufgefüllten Bytes.
Throws:
CipherException - falls die Anzahl negativ ist.

encrypt

public byte[] encrypt(byte[] abPlain)
               throws CipherException
Verschlüsselung des Arrays. Durch die Anpassung auf ein Vielfaches der Blockgröße kann das Feld wachsen.

Parameters:
abPlain - Bytearray, das verschlüsselt werden soll.
Returns:
Verschlüsseltes Bytearray.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

encrypt

public byte[] encrypt(byte[] abPlain,
                      boolean bDoBlockAdaption)
               throws CipherException
Verschlüsselung des Arrays. Durch die Anpassung auf ein Vielfaches der Blockgröße kann das Feld wachsen.

Parameters:
abPlain - Bytearray, das verschlüsselt werden soll.
bDoBlockAdaption - wenn true, wird eine normale Verschlüsselung inkusive Blockadaption durchgeführt. Wenn false, wird das zu verschlüsselnde Array auf die Blocklänge aufgefüllt, das verschlüsselte Array enthält aber keine Information über die Anzahl der aufgefüllten Bytes.
Returns:
Verschlüsseltes Bytearray.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

encrypt

public byte[] encrypt(byte[] abPlain,
                      int nBegin,
                      int nNumber,
                      boolean bDoBlockAdaptation)
               throws CipherException
Verschlüsselt einen Bereich eines Feldes. Anwendung findet diese Methode, wenn eine Menge von Bytes (Array) in mehreren Schritten verschlüsselt werden soll. Der erste Block kann dann mit der Option bDoBlockAdaption=true aufgerufen werden, damit die Anzahl der aufzufüllenden Bytes ermittelt und gespeichert wird. Die folgenden Blöcke werden dann ohne BlockAdaption verschlüsselt.

Parameters:
abPlain - Bytearray, das verschlüsselt werden soll.
nBegin - Anfang des Blocks im Originalfeld.
nNumber - Anzahl der zu verschlüsselnden Bytes. Ist nNumber + nBegin größer als die Länge des Array, so wird nNumber auf die Länge des Arrays angepasst. Muss ein Vielfaches der Blocklänge sein.
Returns:
Verschlüsselte Bytes in Form eines Arrays. Achtung: Wird nur ein Teil des Arrays verschlüsselt, so enthält der Rückgabeparameter nur diesen verschlüsselten Teil des Original-Bytearrays.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen oder wenn der Parameter nNumber kein Vielfaches der Blocklänge ist.

encrypt

public void encrypt(byte[] abPlain,
                    int nBegin,
                    int nNumber,
                    byte[] abCipher,
                    int nCipherOffset,
                    boolean bDoBlockAdaptation)
             throws CipherException
Verschlüsselt einen Bereich eines Feldes. Anwendung findet diese Methode, wenn eine Menge von Bytes (Array) in mehreren Schritten verschlüsselt werden soll. Der erste Block kann dann mit der Option bDoBlockAdaption=true aufgerufen werden, damit die Anzahl der aufzufüllenden Bytes ermittelt und gespeichert wird. Die folgenden Blöcke werden dann ohne BlockAdaption verschlüsselt.

Parameters:
abPlain - Zu verschlüsselndes Bytefeld.
nBegin - Anfang des Blocks im Originalfeld.
nNumber - Anzahl der zu verschlüsselnden Bytes. Ist nNumber + nBegin größer als die Länge des Array, so wird nNumber auf die Länge des Arrays angepasst. Muss ein Vielfaches der Blocklänge sein.
abCipher - Die verschlüsselten Bytes werden in diesem Array gespeichert. Achtung: Wird nur ein Teil des Arrays verschlüsselt, so enthält das Array nur diesen verschlüsselten Teil des original Bytearrays.
nCipherOffset - Die verschlüsselten Bytes werden im Array abCipher beginnend bei dieser Position gespeichert.
Throws:
CipherException - wenn ein Verschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen oder wenn der Parameter nNumber kein Vielfaches der Blocklänge ist.

decrypt

public byte[] decrypt(byte[] abCipher)
               throws CipherException
Entschlüsselung eines Bytefelds. Durch die Anpassung auf die ursprüngliche Länge kann die Größe schrumpfen.

Parameters:
abCipher - Verschlüsseltes Bytefeld.
Returns:
Entschlüsseltes Bytefeld.
Throws:
CipherException - wenn ein Entschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

decrypt

public byte[] decrypt(byte[] abCipher,
                      boolean bUndoBlockAdaption)
               throws CipherException
Entschlüsselung des Arrays. Durch die Anpassung auf die ursprüngliche Länge kann die Größe schrumpfen.

Parameters:
abCipher - Verschlüsseltes Bytefeld.
bUndoBlockAdaption - wenn true, werden die entschlüsselten Daten auf die ursprüngliche Länge angepasst. Wenn false, so findet diese Anpassung nicht statt (nur sinnvoll, wenn vorher ohne Blockadaption verschlüsselt worden ist).
Returns:
Entschlüsseltes Bytearray.
Throws:
CipherException - wenn ein Entschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen.

decrypt

public byte[] decrypt(byte[] abCipher,
                      int nBegin,
                      int nNumber,
                      boolean bUndoBlockAdaptation)
               throws CipherException
Entschlüsselt einen Bereich eines Bytefelds. Anwendung findet diese Methode, wenn ein Bytefeld in mehreren Schritten entschlüsselt werden soll. Der erste Block kann mit der Option bDoBlockAdaption=true aufgerufen werden, damit die Anzahl der aufzufüllenden Bytes ermittelt und gespeichert wird. Die folgenden Blöcke werden dann ohne BlockAdaption entschlüsselt.

Parameters:
abCipher - Zu entschlüsselndes Bytearray.
nBegin - Position, ab der die Entschlüsselung beginnen soll.
nNumber - Anzahl zu entschlüsselnder Bytes. Ist nNumber + nBegin größer als die Länge des Array, so wird nNumber auf die Länge des Arrays angepasst. Muss ein Vielfaches der Blocklänge sein.
Returns:
Entschlüsselte Bytes in Form eines Arrays. Wird nur ein Teil des Arrays entschlüsselt, so enthält der Rückgabeparameter nur diesen entschlüsselten Teil des Original-Bytearrays.
Throws:
CipherException - wenn ein Entschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen oder wenn der Parameter nNumber kein Vielfaches der Blocklänge ist.

decrypt

public void decrypt(byte[] abCipher,
                    int nBegin,
                    byte[] abPlain,
                    int nPlainOffset,
                    int nNumber,
                    boolean bUndoBlockAdaptation)
             throws CipherException
Entschlüsselt einen Bereich eines Bytefelds. Anwendung findet diese Methode, wenn ein Bytefeld in mehreren Schritten entschlüsselt werden soll. Der erste Block kann mit der Option bDoBlockAdaption=true aufgerufen werden, damit die Anzahl der aufzufüllenden Bytes ermittelt und gespeichert wird. Die folgenden Blöcke werden dann ohne BlockAdaption entschlüsselt.

Parameters:
abCipher - Zu entschlüsselndes Bytearray.
nBegin - Position, ab der die Entschlüsselung beginnen soll.
abPlain - Entschlüsselte Bytes in Form eines Arrays. Wird nur ein Teil des Arrays entschlüsselt, so enthält der Rückgabeparameter nur diesen entschlüsselten Teil des Original-Bytearrays.
nPlainOffset - Anfangsindex im Zielfeld.
nNumber - Anzahl zu entschlüsselnder Bytes. Ist nNumber + nBegin größer als die Länge des Array, so wird nNumber auf die Länge des Arrays angepasst. Muss ein Vielfaches der Blocklänge sein.
Throws:
CipherException - wenn ein Entschlüsselungsproblem auftrat. Dies kann beim z.B. beim Fehlen eines Schlüssels oder bei einem falschen Datenformat geschehen oder wenn der Parameter nNumber kein Vielfaches der Blocklänge ist.