PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::CMCrypt Klassenreferenz

Klasse zum Ver- und Entschlüsseln von Daten. Mehr ...

Öffentliche Typen

enum  Algorithm {
  Algo_DES, Algo_TRIPLE_DES, Algo_CAST_128, Algo_CAST_256,
  Algo_xTEA, Algo_THREE_WAY, Algo_SKIPJACK, Algo_BLOWFISH,
  Algo_TWOFISH, Algo_LOKI97, Algo_RC2, Algo_ARCFOUR,
  Algo_RC6, Algo_RIJNDAEL_128, Algo_RIJNDAEL_192, Algo_RIJNDAEL_256,
  Algo_MARS, Algo_PANAMA, Algo_WAKE, Algo_SERPENT,
  Algo_IDEA, Algo_ENIGMA, Algo_GOST, Algo_SAFER_SK64,
  Algo_SAFER_SK128, Algo_SAFER_PLUS
}
 Unterstütze Algorithmen. Mehr ...
 
enum  Mode {
  Mode_STREAM, Mode_ECB, Mode_CBC, Mode_CFB,
  Mode_OFB, Mode_nOFB, Mode_nCFB, Mode_CTR
}
 Unterstütze Modi. Mehr ...
 

Öffentliche Methoden

 CMCrypt ()
 Konstruktor der Klasse. Mehr ...
 
 CMCrypt (Algorithm algo, Mode mode)
 Konstruktor mit Initialisierung des Algorithmus. Mehr ...
 
 ~CMCrypt ()
 Destruktor der Klasse. Mehr ...
 
int Crypt (void *buffer, size_t size)
 Verschlüsseln eines Speicherbereiches. Mehr ...
 
int Crypt (const CVar &in, CBinary &out)
 Verschlüsseln eines Objekts. Mehr ...
 
int Crypt (CBinary &buffer)
 Verschlüsseln eines CBinary-Objekts. Mehr ...
 
int Decrypt (void *buffer, size_t size)
 Entschlüsseln eines Speicherbereiches. Mehr ...
 
int Decrypt (const CBinary &in, CBinary &out)
 Entschlüsseln eines Objekts. Mehr ...
 
int Decrypt (CBinary &buffer)
 Entschlüsseln eines CBinary-Objekts. Mehr ...
 
int GetIVSize () const
 Länge des Initialization Vector. Mehr ...
 
int GetMaxKeySize () const
 Maximale Länge des Schlüssels. Mehr ...
 
int Init (Algorithm algo=CMCrypt::Algo_TWOFISH, Mode mode=CMCrypt::Mode_CFB)
 Initialisierung der Klasse. Mehr ...
 
int NeedIV () const
 Prüfen, ob ein Initialisierungsvektor (IV) benötigt wird. Mehr ...
 
int SetIV (const void *buffer, size_t size)
 Initialization Vector (IV) setzen. Mehr ...
 
int SetIV (const CVar &object)
 Initialization Vector (IV) setzen. Mehr ...
 
int SetIV (const char *iv)
 Initialization Vector (IV) setzen. Mehr ...
 
int SetKey (const void *buffer, size_t size)
 Schlüssel festlegen. Mehr ...
 
int SetKey (const char *key)
 Schlüssel festlegen. Mehr ...
 
int SetKey (const CVar &object)
 Schlüssel festlegen. Mehr ...
 

Öffentliche, statische Methoden

static int Crypt (CBinary &buffer, const CVar &key, Algorithm algo=CMCrypt::Algo_TWOFISH, Mode mode=CMCrypt::Mode_CFB, const CVar &IV=CBinary())
 Daten verschlüsseln. Mehr ...
 
static int Crypt (CBinary &buffer, const char *key, Algorithm algo=CMCrypt::Algo_TWOFISH, Mode mode=CMCrypt::Mode_CFB, const CVar &IV=CBinary())
 Daten verschlüsseln. Mehr ...
 
static int Decrypt (CBinary &buffer, const CVar &key, Algorithm algo=CMCrypt::Algo_TWOFISH, Mode mode=CMCrypt::Mode_CFB, const CVar &IV=CBinary())
 Daten entschlüsseln. Mehr ...
 
static int Decrypt (CBinary &buffer, const char *key, Algorithm algo=CMCrypt::Algo_TWOFISH, Mode mode=CMCrypt::Mode_CFB, const CVar &IV=CBinary())
 Daten entschlüsseln. Mehr ...
 

Private Attribute

CBinary IV
 Initialisierungsvektor. Mehr ...
 
CBinary Key
 Schlüssel. Mehr ...
 
void * mcrypt
 Pointer auf ein initialisiertes Objekt der libmcrypt. Mehr ...
 

Ausführliche Beschreibung

Include:
#include <ppl6-crypt.h>
Beschreibung:
Die Klasse CMCrypt dient zum Ver- und Entschlüsseln von Daten und basiert auf der MCrypt-Library, die unter der GNU General Public License (GPL) steht.
Aus der Manpage mcrypt(3):
The libmcrypt is a data encryption library. The library is thread safe and provides encryption and decryption functions. This version of the library supports many encryption algorithms and encryption modes. Some algorithms which are supported: SERPENT, RIJNDAEL, 3DES, GOST, SAFER+, CAST-256, RC2, XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more. (see CMCrypt::Algorithm)
OFB, CBC, ECB, nOFB, nCFB and CFB are the modes that all algorithms may function. ECB, CBC, encrypt in blocks but CTR, nCFB, nOFB, CFB and OFB in bytes (streams). Note that CFB and OFB in the rest of the document represent the "8bit CFB or OFB" mode. nOFB and nCFB modes represents a n-bit OFB/CFB mode, n is used to represent the algorithm's block size. The library supports an extra STREAM mode to include some stream algorithms like WAKE or ARCFOUR. (see CMCrypt::Mode)
In this version of the library all modes and algorithms are modular, which means that the algorithm and the mode is loaded at run-time. This way you can add algorithms and modes faster, and much easier.
Zu beachten
Damit diese Klasse verwendet werden kann, muss vor Aufruf des configure-Scripts die Library libmcrypt installiert sein. Falls das configure die Library nicht automatisch findet, kann der Installationspfad über den configure Parameter "--with-libmcrypt-prefix=..." angegeben werden. Falls libmcrypt nicht eingebunden wurde, liefern fast alle Funktionen einen Fehler zurück und setzen den Fehlercode "518".
Mit der statischen Funktion Cppl6Core::haveMCrypt kann zudem zur Laufzeit geprüft werden, ob libmcrypt eingebunden wurde.
printf("MCrypt steht nicht zur Verfügung!\n");
return;
}
oder auch:
if (crypt.NeedIV()<0 && ppl6::GetErrorCode()==518) {
printf("MCrypt steht nicht zur Verfügung!\n");
return;
}
Beispiel:
Hier ein Beispiel, wie die Klasse zum ver- und entschlüsseln von Daten verwendet werden kann:
#include <ppl6.h>
#include <ppl6-crypt.h>
int main (int argc, char **argv)
{
// Instanz der Klasse erstellen
// Objekt mit dem gewünschten Algorithmus initialisieren
return 0;
}
// Wir legen ein Objekt für den IV an
if (MC.NeedIV()) { // Prüfen, ob wir überhaupt einen IV brauchen
size_t ivsize=MC.GetIVSize(); // Ja, wir ermitteln die benötigte Größe
ppl6::Random(IV,ivsize); // Und erstellen entsprechend viele Zufallsdaten
MC.SetIV(IV); // Diese übergeben wir an die Klasse
}
// Nun setzen wir das Passwort für die Verschlüsselung
MC.SetKey("uirfgreuifgewzifg");
// Jetzt brauchen wir noch ein paar Daten, die wir verschlüsseln wollen
ppl6::CBinary bin="Hallo Welt";
// Diese geben wir als HexDump aus, damit wir sehen, wie die Daten vor der
// Verschlüsselung aussahen
bin.HexDump();
// Jetzt wird verschlüsselt
if (!MC.Crypt(bin)) { // Falls ein Fehler auftritt, beenden wir das Programm
return 0;
}
// Nun geben wir zum Vergleich die verschlüsselten Daten als Hexdump aus
bin.HexDump();
// Und nun entschlüsseln wir sie wieder
if (!MC.Decrypt(bin)) {
ppl6::PrintError(); // Auch hier beenden wir das Programm im Fehlerfall
return 0;
}
// Zu guter Letzt geben wir die entschlüsselten Daten wieder als Hexdump aus.
// Dieser sollte identisch mit dem ersten sein
bin.HexDump();
}
Wenn das Programm ausgeführt wird, erhält man folgende Ausgabe:
0x00000000: 48 61 6C 6C 6F 20 57 65 6C 74                   : Hallo Welt
0x00000000: 32 57 6E 7C E6 35 87 90 50 EE                   : 2Wn|.5..P.
0x00000000: 48 61 6C 6C 6F 20 57 65 6C 74                   : Hallo Welt
Die zweite Zeile wird übrigens bei jedem Aufruf anderes aussehen, obwohl wir den gleichen Schlüssel verwendet haben. Das liegt daran, dass wir den Initialisierungsvektor mit Zufallsdaten gefüllt haben.

Alternativ können auch die statischen Funktionen der Klasse verwendet werden. Ein Beispiel dazu ist hier zu finden.

Dokumentation der Aufzählungstypen

This version of the library supports many encryption algorithms and encryption modes. Some algorithms which are supported: SERPENT, RIJNDAEL, 3DES, GOST, SAFER+, CAST-256, RC2, XTEA, 3WAY, TWOFISH, BLOWFISH, ARCFOUR, WAKE and more.

Aufzählungswerte
Algo_DES 

The traditional DES algorithm designed by IBM and US NSA. Uses 56 bit key and 64 bit block. It is now considered a weak algorithm, due to its small key size (it was never intended for use with classified data).

Algo_TRIPLE_DES 

3DES or Triple DES: DES but with multiple (triple) encryption. It encrypts the plaintext once, then decrypts it with the second key, and encrypts it again with the third key (outer cbc mode used for cbc). Much better than traditional DES since the key is now 168 bits (actually the effective key length is 112 bits due to the meet-in-the-middle attack).

Algo_CAST_128 

CAST was designed in Canada by Carlisle Adams and Stafford Tavares. The original algorithm used a 64bit key and block. The algorithm here is CAST-128 (also called CAST5) which has a 128bit key and 64bit block size.

Algo_CAST_256 

CAST-256 was designed by Carlisle Adams. It is a symmetric cipher designed in accordance with the CAST design procedure. It is an extention of the CAST-128, having a 128 bit block size, and up to 256 bit key size.

Algo_xTEA 

TEA stands for the Tiny Encryption Algorithm. It is a feistel cipher designed by David Wheeler & Roger M. Needham. The original TEA was intended for use in applications where code size is at a premium, or where it is necessary for someone to remember the algorithm and code it on an arbitrary machine at a later time. The algorithm used here is extended TEA and has a 128bit key size and 64bit block size.

Algo_THREE_WAY 

The 3way algorithm designed by Joan Daemen. It uses key and block size of 96 bits.

Algo_SKIPJACK 

SKIPJACK was designed by the US NSA. It was part of the illfated "Clipper" Escrowed Encryption Standard (EES) (FIPS 185) proposal. It operates on 64bit blocks and uses a key of 80 bits. SKIPJACK is provided only as an extra module to libmcrypt.

Algo_BLOWFISH 

The Blowfish algorithm designed by Bruce Schneier. It is better and faster than DES. It can use a key up to 448 bits.

Algo_TWOFISH 

Twofish was designed by Bruce Schneier, Doug Whiting, John Kelsey, Chris Hall, David Wagner for Counterpane systems. Intended to be highly secure and highly flexible. It uses a 128bit block size and 128,192,256 bit key size. (Twofish is the default algorithm)

Algo_LOKI97 

LOKI97 was designed by Lawrie Brown and Josef Pieprzyk. It has a 128-bit block length and a 256bit key schedule, which can be initialized using 128, 192 or 256 bit keys. It has evolved from the earlier LOKI89 and LOKI91 64-bit block ciphers, with a strengthened key schedule and a larger keyspace.

Algo_RC2 

RC2 (RC stands for Rivest Cipher) was designed by Ron Rivest. It uses block size of 64 bit and a key size from 8 to 1024 bits. It is optimized for 16bit microprocessors (reflecting its age). It is described in the RFC2268.

Algo_ARCFOUR 

RC4 was designed by Ron Rivest. For several years this algorithm was considered a trade secret and details were not available. In September 1994 someone posted the source code in the cypherpunks mailing list. Although the source code is now available RC4 is trademarked by RSADSI so a compatible cipher named ARCFOUR is included in the mcrypt distribution. It is a stream cipher and has a maximum key of 2048 bits.

Algo_RC6 

RC6 was designed by Ron Rivest for RSA labs. In mcrypt it uses block size of 128 bit and a key size of 128/192/256 bits. Refer to RSA Labs and Ron Rivest for any copyright, patent or license issues for the RC6 algorithm. RC6 is provided only as an extra module to libmcrypt.

Algo_RIJNDAEL_128 

Rijndael is a block cipher, designed by Joan Daemen and Vincent Rijmen, and was approved for the USA’s NIST Advanced Encryption Standard, FIPS-197. The cipher has a variable block length and key length. Rijndael can be implemented very efficiently on a wide range of processors and in hardware. The design of Rijndael was strongly influenced by the design of the block cipher Square. There exist three versions of this algorithm, namely: RIJNDAEL-128 (the AES winner), RIJNDAEL-192, RIJNDAEL-256 The numerals 128, 192 and 256 stand for the length of the block size.

Algo_RIJNDAEL_192 

Rijndael is a block cipher, designed by Joan Daemen and Vincent Rijmen, and was approved for the USA’s NIST Advanced Encryption Standard, FIPS-197. The cipher has a variable block length and key length. Rijndael can be implemented very efficiently on a wide range of processors and in hardware. The design of Rijndael was strongly influenced by the design of the block cipher Square. There exist three versions of this algorithm, namely: RIJNDAEL-128 (the AES winner), RIJNDAEL-192, RIJNDAEL-256 The numerals 128, 192 and 256 stand for the length of the block size.

Algo_RIJNDAEL_256 

Rijndael is a block cipher, designed by Joan Daemen and Vincent Rijmen, and was approved for the USA’s NIST Advanced Encryption Standard, FIPS-197. The cipher has a variable block length and key length. Rijndael can be implemented very efficiently on a wide range of processors and in hardware. The design of Rijndael was strongly influenced by the design of the block cipher Square. There exist three versions of this algorithm, namely: RIJNDAEL-128 (the AES winner), RIJNDAEL-192, RIJNDAEL-256 The numerals 128, 192 and 256 stand for the length of the block size.

Algo_MARS 

MARS is a 128-bit block cipher designed by IBM as a candidate for the Advanced Encryption Standard. Refer to IBM for any copyright, patent or license issues for the MARS algorithm. MARS is provided only as an extra module to libmcrypt.

Algo_PANAMA 

PANAMA is a cryptographic module that can be used both as a cryptographic hash function and as a stream cipher. It designed by Joan Daemen and Craig Clapp. PANAMA (the stream cipher) is included in libmcrypt.

Algo_WAKE 

WAKE stands for Word Auto Key Encryption, and is an encryption system for medium speed encryption of blocks and of high security. WAKE was designed by David J. Wheeler. It is intended to be fast on most computers and relies on repeated table use and having a large state space.

Algo_SERPENT 

Serpent is a 128-bit block cipher designed by Ross Anderson, Eli Biham and Lars Knudsen as a candidate for the Advanced Encryption Standard. Serpent’s design was limited to well understood mechanisms, so that could rely on the wide experience of block cipher cryptanalysis, and achieve the highest practical level of assurance that no shortcut attack will be found. Serpent has twice as many rounds as are necessary, to block all currently known shortcut attacks. Despite these exacting design constraints, Serpent is faster than DES.

Algo_IDEA 

IDEA stands for International Data Encryption Algorithm and was designed by Xuejia Lai and James Massey. It operates on 64bit blocks and uses a key of 128 bits. Refer to Ascom-Tech AG for any copyright, patent or license issues for the IDEA algorithm. IDEA is provided only as an extra module to libmcrypt.

Algo_ENIGMA 

(UNIX crypt): A one-rotor machine designed along the lines of Enigma but considerable trivialized. Very easy to break for a skilled cryptanalyst. I suggest against using it. Added just for completeness.

Algo_GOST 

A former soviet union’s algorithm. An acronym for "Gosudarstvennyi Standard" or Government Standard. It uses a 256 bit key and a 64 bit block. The S-boxes used here are described in the Applied Cryptography book by Bruce Schneier. They were used in an application for the Central Bank of the Russian Federation.

Some quotes from gost.c: The standard is written by A. Zabotin (project leader), G.P. Glazkov, and V.B. Isaeva. It was accepted and introduced into use by the action of the State Standards Committee of the USSR on 2 June 1989 as No. 1409. It was to be reviewed in 1993, but whether anyone wishes to take on this obligation from the USSR is questionable.

This code is based on the 25 November 1993 draft translation by Aleksandr Malchik, with Whitfield Diffie, of the Government Standard of the U.S.S.R. GOST 28149-89, "Cryptographic Transformation Algorithm", effective 1 July 1990. (Whitf.nosp@m.ield.nosp@m..Diff.nosp@m.ie@e.nosp@m.ng.su.nosp@m.n.co.nosp@m.m) Some details have been cleared up by the paper "Soviet Encryption Algorithm" by Josef Pieprzyk and Leonid Tombak of the University of Wollongong, New South Wales.

Algo_SAFER_SK64 

SAFER (Secure And Fast Encryption Routine) is a block cipher developed by Prof. J.L. Massey at the Swiss Federal Institute of Technology. There exist four versions of this algorithm, namely: SAFER K-64, SAFER K-128 , SAFER SK-64 and SAFER SK-128. The numerals 64 and 128 stand for the length of the user-selected key, ’K’ stands for the original key schedule and ’SK’ stands for the strengthened key schedule (in which some of the "weaknesses" of the original key schedule have been removed). In mcrypt only SAFER SK-64 and SAFER SK-128 are used.

Algo_SAFER_SK128 

SAFER (Secure And Fast Encryption Routine) is a block cipher developed by Prof. J.L. Massey at the Swiss Federal Institute of Technology. There exist four versions of this algorithm, namely: SAFER K-64, SAFER K-128 , SAFER SK-64 and SAFER SK-128. The numerals 64 and 128 stand for the length of the user-selected key, ’K’ stands for the original key schedule and ’SK’ stands for the strengthened key schedule (in which some of the "weaknesses" of the original key schedule have been removed). In mcrypt only SAFER SK-64 and SAFER SK-128 are used.

Algo_SAFER_PLUS 

SAFER+ was designed by Prof. J.L. Massey, Prof. Gurgen H. Khachatrian and Dr. Melsik K. Kuregian for Cylink. SAFER+ is based on the existing SAFER family of ciphers and provides for a block size of 128bits and 128, 192 and 256 bits key length.

OFB, CBC, ECB, nOFB, nCFB and CFB are the modes that all algorithms may function. ECB, CBC, encrypt in blocks but CTR, nCFB, nOFB, CFB and OFB in bytes (streams). Note that CFB and OFB in the rest of the document represent the "8bit CFB or OFB" mode. nOFB and nCFB modes represents a n-bit OFB/CFB mode, n is used to represent the algorithm's block size. The library supports an extra STREAM mode to include some stream algorithms like WAKE or ARCFOUR.

Aufzählungswerte
Mode_STREAM 

The mode used with stream ciphers. In this mode the keystream from the cipher is XORed with the plaintext. Thus you should NOT ever use the same key.

Mode_ECB 

The Electronic CodeBook mode. It is the simplest mode to use with a block cipher. Encrypts each block independently. It is a block mode so plaintext length should be a multiple of blocksize (n*block‐size).

Mode_CBC 

The Cipher Block Chaining mode. It is better than ECB since the plaintext is XOR’ed with the previous ciphertext. A random block should be placed as the first block (IV) so the same block or messages always encrypt to something different. It is a block mode so plaintext length should be a multiple of blocksize (n*blocksize).

Mode_CFB 

The Cipher-Feedback Mode (in 8bit). This is a self-synchronizing stream cipher implemented from a block cipher. This is the best mode to use for encrypting strings or streams. This mode requires an IV.

Mode_OFB 

The Output-Feedback Mode (in 8bit). This is a synchronous stream cipher implemented from a block cipher. It is intended for use in noisy lines, because corrupted ciphertext blocks do not corrupt the plaintext blocks that follow. Insecure (because used in 8bit mode) so it is recommended not to use it. Added just for completeness.

Mode_nOFB 

The Output-Feedback Mode (in nbit). n Is the size of the block of the algorithm. This is a synchronous stream cipher implemented from a block cipher. It is intended for use in noisy lines, because corrupted ciphertext blocks do not corrupt the plaintext blocks that follow. This mode operates in streams.

Mode_nCFB 

The Cipher-Feedback Mode (in nbit). n Is the size of the block of the algorithm. This is a self synchronizing stream cipher implemented from a block cipher. This mode operates in streams.

Mode_CTR 

The Counter Mode. This is a stream cipher implemented from a block cipher. This mode uses the cipher to encrypt a set of input blocks, called counters, to produce blocks that will be XORed with the plaintext. In libmcrypt the counter is the given IV which is incremented at each step. This mode operates in streams.

Beschreibung der Konstruktoren und Destruktoren

ppl6::CMCrypt::CMCrypt ( )
Beschreibung:
Bei Verwendung dieses Konstruktors werden nur einige interne Variablen initialisert und ein Default Initialisierungsvektor (IV) gesetzt (siehe CMCrypt::SetIV). Der gewünschte Verschlüsselungsalgorithmus muss mittels der Funktion CMCrypt::Init festgelegt werden.
ppl6::CMCrypt::CMCrypt ( Algorithm  algo,
Mode  mode 
)
Beschreibung:
Bei Verwendung dieses Konstruktors wird die Klasse gleichzeitig mit einem bestimmten Algorithmus und einem Verschlüsselungsmodus initialisiert, so dass die Funktion CMCrypt::Init nicht mehr aufgerufen werden muss.
Parameter
algoDer gewünschte Algorithmus (siehe CMCrypt::Algorithm)
modeDer gewünschte Modus (siehe CMCrypt::Mode)
Zu beachten
Auch wenn dieser Konstruktor verwendet wurde, kann jederzeit mit der Funktion CMCrypt::Init ein anderer Verschlüsselungsmechanismus ausgewählt werden.
ppl6::CMCrypt::~CMCrypt ( )

Dokumentation der Elementfunktionen

int ppl6::CMCrypt::Crypt ( void *  buffer,
size_t  size 
)
Beschreibung:
Mit dieser Funktion wird der mit buffer angegebene Speicherbereich mit einer Länge von size Bytes verschlüsselt.
Parameter
bufferPointer auf den Beginn des zu verschlüsselnden Speicherbereiches
sizeDie Größe des zu verschlüsselnden Speicherbereiches in Bytes
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::Crypt ( const CVar in,
CBinary out 
)
Beschreibung:
Mit dieser Funktion wird das mit in übergebene von CVar abgeleitete Objekt eingelesen und seine verschlüsselte Form in out gespeichert. Die Verschlüsselung erfolgt nicht innerhalb des Objekts in, da die Verschlüsselung auf binärer Ebene abläuft und das Ergebnis mit hoher Wahrscheinlichkeit kein gültiges Objekt mehr ist (einzige Ausnahme ist CBinary).
Parameter
[in]inDas zu verschlüsselnde Objekt. Gegenwärtig wird CString, CWString und CBinary unterstützt.
[out]outEin Objekt vom Typ CBinary, in dem die verschlüsselten Daten abgelegt werden.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::Crypt ( CBinary buffer)
Beschreibung:
Mit dieser Funktion wird der vom CBinary-Objekts buffer verwaltete Speicherbereich verschlüsselt.
Parameter
[in,out]bufferDas CBinary Objekt, das den zu verschlüsselnden Speicherbereich enthält.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::Decrypt ( void *  buffer,
size_t  size 
)
Beschreibung:
Mit dieser Funktion wird der mit buffer angegebene verschlüsselte Speicherbereich mit einer Länge von size Bytes entschlüsselt.
Parameter
bufferPointer auf den Beginn des verschlüsselten Speicherbereiches
sizeDie Größe des zu entschlüsselnden Speicherbereiches in Bytes
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::Decrypt ( const CBinary in,
CBinary out 
)
Beschreibung:
Mit dieser Funktion wird der vom CBinary-Objekt in verwaltete und verschlüsselte Speicherbereich entschlüsselt und das Ergebnis in out gespeichert.
Parameter
[in]inDas CBinary Objekt, das den zu entschlüsselnden Speicherbereich enthält.
[out]outEin Objekt vom Typ CBinary, in dem die entschlüsselten Daten abgelegt werden.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::Decrypt ( CBinary buffer)
Beschreibung:
Mit dieser Funktion wird der vom CBinary-Objekt buffer verwaltete und verschlüsselte Speicherbereich entschlüsselt.
Parameter
[in,out]bufferDas CBinary Objekt, das den zu entschlüsselnden Speicherbereich enthält.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
Zu beachten
Vor Aufruf dieser Funktion muss zunächst der gewünschte Verschlüsselungsalgorithmus mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Ferner muss eventuell noch ein Initialisierungsvektor (siehe CMCrypt::NeedIV und CMCrypt::SetIV) und ein Schlüssel (siehe CMCrypt::SetKey) angegeben worden sein.
int ppl6::CMCrypt::GetIVSize ( ) const
Beschreibung:
Mit dieser Funktion kann die Länge des Intilialisierungsvektors (IV) für den ausgewählten Algorithmus ausgelesen werden. Die Länge des IV ist abhängig vom Algorithmus, daher liefert die Funktion erst nach der Initialisierung mit CMCrypt::Init oder bei Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) einen aussagekräftigen Wert. Ob ein Algorithmus überhaupt einen IV benötigt, kann mit der Funktion CMCrypt::NeedIV geprüft werden.
Weitere Informationen zum Thema "Initialization Vector" sind in der Wikipedia zu finden:
Rückgabe
Liefert die Länge des IV zurück
Siehe auch
CMCrypt::SetIV
int ppl6::CMCrypt::GetMaxKeySize ( ) const
Beschreibung:
Mit dieser Funktion kann abgrefragt werden, wie lang der zur Verschlüsselung verwendete Schlüssel maximal sein darf. Die Länge ist abhängig vom verwendeten Algorithmus, daher liefert die Funktion erst nach der Initialisierung mit CMCrypt::Init oder bei Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) einen aussagekräftigen Wert.
Der Schlüssel darf jede beliebige Länge zwischen 1 und dem zurückgegebenen Wert lang sein.
Rückgabe
Die Funktion liefert die maximal erlaubte Länge des Schlüssels zurück oder -1, wenn die Klasse noch nicht mit einem Algorithmus initialisiert wurde.
int ppl6::CMCrypt::Init ( Algorithm  algo = CMCrypt::Algo_TWOFISH,
Mode  mode = CMCrypt::Mode_CFB 
)
Beschreibung:
Mit dieser Funktion wird die CMCrypt-Klasse initialisiert, indem der gewünschte Verschlüsselungsalgorithmus und der Modus ausgewählt wird. Beide Parameter sind Optional. Wird die Funktion ohne Parameter aufgerufen, wird als Default der Algorithmus CMCrypt::Algo_TWOFISH und der Verschlüsselungsmodus CMCrypt::Mode_CFB verwendet.
Parameter
algoDer gewünschte Algorithmus (siehe CMCrypt::Algorithm). Der Default ist CMCrypt::Algo_TWOFISH
modeDer gewünschte Modus (siehe CMCrypt::Mode). Der Defalt ist CMCrypt::Mode_CFB
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, sonst 0. Falls die libmcrypt bei der Erstellung der Library nicht eingebunden wurde, liefert die Funktion ebenfalls 0 zurück und setzt den Fehlercode 518.
int ppl6::CMCrypt::NeedIV ( ) const
Beschreibung:
Der Initialisierungsvektor (IV) ist ein Begriff aus der Kryptographie und bezeichnet einen Block von Zufallsdaten, der in bestimmten Modi einiger Blockchiffren verwendet wird, wie dem Cipher Block Chaining Mode (siehe CMCrypt::Mode_CBC).
Beim Verschlüsseln von Nachrichten muss vermieden werden, dass gleiche Klartextblöcke immer wieder gleiche Geheimtextblöcke ergeben. Ein förmlicher Brief fängt im Deutschen in der Regel mit "Sehr geehrter Herr/Frau" gefolgt vom Namen an. Aus diesem Wissen könnte ein Angreifer versuchen Rückschlüsse auf den verwendeten Schlüssel zu ziehen. Um das zu vermeiden, wird der erste Klartextblock mit einem IV XOR-verknüpft. Da der IV zufällig erzeugt wurde, unterscheiden sich die entstehenden Geheimtexte auch dann, wenn die Klartexte mit identischen Daten beginnen.
Da bei den Verschlüsselungsalgorithmen in der Regel Modi gewählt werden, bei denen der Geheimtext eines Blocks vom Geheimtext seines Vorgängerblocks abhängt, muss der IV nicht geheim gehalten werden. Im beschriebenen Fall würde der Geheimtext des Block Bn − 1 als IV des Blocks Bn fungieren, so dass für die Kryptanalysten ohnehin n − 1 Initialisierungsvektoren bekannt wären.
(Quelle: http://de.wikipedia.org/wiki/Initialisierungsvektor)
Ob ein Initialisierungsvektor benötigt wird, hängt vom verwendeten Verschlüsselungsalgorithmus ab. Dieser muss daher zunächst mittels der Funktion CMCrypt::Init oder durch Verwendung des Konstruktors CMCrypt::CMCrypt(Algorithm algo, Mode mode) ausgewählt worden sein. Anschließend kann dann mit dieser Funktion geprüft werden, ob ein IV benötigt wird und mit CMCrypt::GetIVSize wie lang dieser sein muss.
Rückgabe
Wird ein IV benötigt, liefert die Funktion 1 zurück, sonst 0. Im Fehlerfall wird -1 zurückgegeben.
int ppl6::CMCrypt::SetIV ( const void *  buffer,
size_t  size 
)
Beschreibung:
Mit dieser Funktion wird der Initialization Vector (kurz: IV) gesetzt.
Der Initialisierungsvektor (IV) ist ein Begriff aus der Kryptographie und bezeichnet einen Block von Zufallsdaten, der in bestimmten Modi einiger Blockchiffren verwendet wird, wie dem Cipher Block Chaining Mode (siehe CMCrypt::Mode_CBC).
Beim Verschlüsseln von Nachrichten muss vermieden werden, dass gleiche Klartextblöcke immer wieder gleiche Geheimtextblöcke ergeben. Ein förmlicher Brief fängt im Deutschen in der Regel mit "Sehr geehrter Herr/Frau" gefolgt vom Namen an. Aus diesem Wissen könnte ein Angreifer versuchen Rückschlüsse auf den verwendeten Schlüssel zu ziehen. Um das zu vermeiden, wird der erste Klartextblock mit einem IV XOR-verknüpft. Da der IV zufällig erzeugt wurde, unterscheiden sich die entstehenden Geheimtexte auch dann, wenn die Klartexte mit identischen Daten beginnen.
Da bei den Verschlüsselungsalgorithmen in der Regel Modi gewählt werden, bei denen der Geheimtext eines Blocks vom Geheimtext seines Vorgängerblocks abhängt, muss der IV nicht geheim gehalten werden. Im beschriebenen Fall würde der Geheimtext des Block Bn − 1 als IV des Blocks Bn fungieren, so dass für die Kryptanalysten ohnehin n − 1 Initialisierungsvektoren bekannt wären.
(Quelle: http://de.wikipedia.org/wiki/Initialisierungsvektor)
Parameter
bufferPointer auf den Speicherbereich, der den IV enthält
sizeLänge des Speicherbereichs
Rückgabe
Bei Erfolg wird 1 zurückgegeben, im Fehlerfall 0. Ein Fehler tritt auf, wenn der Pointer buffer auf Null zeigt, die Länge size 0 ist oder kein Speicher mehr zur Verfügung steht.
Zu beachten
Falls der gewählte Algorithmus einen IV benötigt, aber keiner gesetzt wurde, verwendet die Klasse einen statischen IV. Dieses Vorgehen ist aber nicht der Sicherheit dienlich, da der IV immer gleich ist und dem Quellcode der Klasse entnommen werden kann. Es sollte daher immer ein eigener IV gesetzt werden!
Die Klasse ist relativ tollerant, was die Länge des IV angeht. Zwar kann man mit der Funktion CMCrypt::GetIVSize abfragen, wir lang der IV für den gewählten Algorithmus sein muss, jedoch kann man auch einen längeren oder kürzeren Wert angeben. Ist der Wert zu kurz, wird er einfach solange wiederholt, bis die erforderliche Länge erreicht ist. Ist er zu lang, wird er an der notendigen Stelle abgeschnitten. Dadurch kann es unter Umständen zu Problemen kommen, falls ein Datenblock mit einer Anwendung verschlüsselt wurde oder entschlüsselt werden soll. Es wird daher empfohlen die erforderliche Länge vorher mit CMCrypt::GetIVSize abzufragen und dann mit dieser Funktion einen passenden Wert zu setzen.
int ppl6::CMCrypt::SetIV ( const CVar object)
Beschreibung:
Mit dieser Funktion wird der Initialization Vector (kurz: IV) gesetzt.
Der Initialisierungsvektor (IV) ist ein Begriff aus der Kryptographie und bezeichnet einen Block von Zufallsdaten, der in bestimmten Modi einiger Blockchiffren verwendet wird, wie dem Cipher Block Chaining Mode (siehe CMCrypt::Mode_CBC).
Beim Verschlüsseln von Nachrichten muss vermieden werden, dass gleiche Klartextblöcke immer wieder gleiche Geheimtextblöcke ergeben. Ein förmlicher Brief fängt im Deutschen in der Regel mit "Sehr geehrter Herr/Frau" gefolgt vom Namen an. Aus diesem Wissen könnte ein Angreifer versuchen Rückschlüsse auf den verwendeten Schlüssel zu ziehen. Um das zu vermeiden, wird der erste Klartextblock mit einem IV XOR-verknüpft. Da der IV zufällig erzeugt wurde, unterscheiden sich die entstehenden Geheimtexte auch dann, wenn die Klartexte mit identischen Daten beginnen.
Da bei den Verschlüsselungsalgorithmen in der Regel Modi gewählt werden, bei denen der Geheimtext eines Blocks vom Geheimtext seines Vorgängerblocks abhängt, muss der IV nicht geheim gehalten werden. Im beschriebenen Fall würde der Geheimtext des Block Bn − 1 als IV des Blocks Bn fungieren, so dass für die Kryptanalysten ohnehin n − 1 Initialisierungsvektoren bekannt wären.
(Quelle: http://de.wikipedia.org/wiki/Initialisierungsvektor)
Parameter
objectEin von CVar abgeleitetes Objekt, dass den IV enthält. Derzeit wird CString, CWString und CBinary unterstützt.
Rückgabe
Bei Erfolg wird 1 zurückgegeben, im Fehlerfall 0. Ein Fehler tritt auf, wenn das Objekt leer ist oder kein Speicher mehr zur Verfügung steht.
Zu beachten
Falls der gewählte Algorithmus einen IV benötigt, aber keiner gesetzt wurde, verwendet die Klasse einen statischen IV. Dieses Vorgehen ist aber nicht der Sicherheit dienlich, da der IV immer gleich ist und dem Quellcode der Klasse entnommen werden kann. Es sollte daher immer ein eigener IV gesetzt werden!
Die Klasse ist relativ tollerant, was die Länge des IV angeht. Zwar kann man mit der Funktion CMCrypt::GetIVSize abfragen, wir lang der IV für den gewählten Algorithmus sein muss, jedoch kann man auch einen längeren oder kürzeren Wert angeben. Ist der Wert zu kurz, wird er einfach solange wiederholt, bis die erforderliche Länge erreicht ist. Ist er zu lang, wird er an der notendigen Stelle abgeschnitten. Dadurch kann es unter Umständen zu Problemen kommen, falls ein Datenblock mit einer Anwendung verschlüsselt wurde oder entschlüsselt werden soll. Es wird daher empfohlen die erforderliche Länge vorher mit CMCrypt::GetIVSize abzufragen und dann mit dieser Funktion einen passenden Wert zu setzen.
int ppl6::CMCrypt::SetIV ( const char *  iv)
Beschreibung:
Mit dieser Funktion wird der Initialization Vector (kurz: IV) gesetzt.
Der Initialisierungsvektor (IV) ist ein Begriff aus der Kryptographie und bezeichnet einen Block von Zufallsdaten, der in bestimmten Modi einiger Blockchiffren verwendet wird, wie dem Cipher Block Chaining Mode (siehe CMCrypt::Mode_CBC).
Beim Verschlüsseln von Nachrichten muss vermieden werden, dass gleiche Klartextblöcke immer wieder gleiche Geheimtextblöcke ergeben. Ein förmlicher Brief fängt im Deutschen in der Regel mit "Sehr geehrter Herr/Frau" gefolgt vom Namen an. Aus diesem Wissen könnte ein Angreifer versuchen Rückschlüsse auf den verwendeten Schlüssel zu ziehen. Um das zu vermeiden, wird der erste Klartextblock mit einem IV XOR-verknüpft. Da der IV zufällig erzeugt wurde, unterscheiden sich die entstehenden Geheimtexte auch dann, wenn die Klartexte mit identischen Daten beginnen.
Da bei den Verschlüsselungsalgorithmen in der Regel Modi gewählt werden, bei denen der Geheimtext eines Blocks vom Geheimtext seines Vorgängerblocks abhängt, muss der IV nicht geheim gehalten werden. Im beschriebenen Fall würde der Geheimtext des Block Bn − 1 als IV des Blocks Bn fungieren, so dass für die Kryptanalysten ohnehin n − 1 Initialisierungsvektoren bekannt wären.
(Quelle: http://de.wikipedia.org/wiki/Initialisierungsvektor)
Parameter
ivPointer auf einen mit 0 terminierten String.
Rückgabe
Bei Erfolg wird 1 zurückgegeben, im Fehlerfall 0. Ein Fehler tritt auf, wenn der String iv auf Null zeigt, leer ist oder kein Speicher mehr zur Verfügung steht.
Zu beachten
Falls der gewählte Algorithmus einen IV benötigt, aber keiner gesetzt wurde, verwendet die Klasse einen statischen IV. Dieses Vorgehen ist aber nicht der Sicherheit dienlich, da der IV immer gleich ist und dem Quellcode der Klasse entnommen werden kann. Es sollte daher immer ein eigener IV gesetzt werden!
Die Klasse ist relativ tollerant, was die Länge des IV angeht. Zwar kann man mit der Funktion CMCrypt::GetIVSize abfragen, wir lang der IV für den gewählten Algorithmus sein muss, jedoch kann man auch einen längeren oder kürzeren Wert angeben. Ist der Wert zu kurz, wird er einfach solange wiederholt, bis die erforderliche Länge erreicht ist. Ist er zu lang, wird er an der notendigen Stelle abgeschnitten. Dadurch kann es unter Umständen zu Problemen kommen, falls ein Datenblock mit einer Anwendung verschlüsselt wurde oder entschlüsselt werden soll. Es wird daher empfohlen die erforderliche Länge vorher mit CMCrypt::GetIVSize abzufragen und dann mit dieser Funktion einen passenden Wert zu setzen.
int ppl6::CMCrypt::SetKey ( const void *  buffer,
size_t  size 
)
Beschreibung:
Mit dieser Funktion wird der Schlüssel definiert, mit dem die Daten verschlüsselt oder entschlüsselt werden sollen. Die maximale Länge des Schlüssels hängt vom Algorithmus ab, und muss daher vorher mit der Funktion CMCrypt::GetMaxKeySize() abgefragt werden.
Parameter
bufferPointer auf den Speicherbereich, der den Schlüssel enthält
sizeLänge des Schlüssels in Bytes
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, im Fehlerfall 0
Zu beachten
Die Funktion nimmt auch längere Schlüssel an, jedoch wird er bei Aufruf von Crypt oder Decrypt bei der maximalen Länge abgeschnitten. Das kann unter umständen zu Problemen führen, wenn zur Verschlüsselung oder Entschlüsselung auch andere Programme eingesetzt werden. Es wird daher empfohlen die maximale Länge durch Aufruf von CMCrypt::GetMaxKeySize abzufragen und einen passenden Schlüssel zu verwenden.
int ppl6::CMCrypt::SetKey ( const char *  key)
Beschreibung:
Mit dieser Funktion wird der Schlüssel definiert, mit dem die Daten verschlüsselt oder entschlüsselt werden sollen. Die maximale Länge des Schlüssels hängt vom Algorithmus ab, und muss daher vorher mit der Funktion CMCrypt::GetMaxKeySize() abgefragt werden.
Parameter
keyPointer auf einen mit 0 terminierten String, der den Schlüssel enthält
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, im Fehlerfall 0
Zu beachten
Die Funktion nimmt auch längere Schlüssel an, jedoch wird er bei Aufruf von Crypt oder Decrypt bei der maximalen Länge abgeschnitten. Das kann unter umständen zu Problemen führen, wenn zur Verschlüsselung oder Entschlüsselung auch andere Programme eingesetzt werden. Es wird daher empfohlen die maximale Länge durch Aufruf von CMCrypt::GetMaxKeySize abzufragen und einen passenden Schlüssel zu verwenden.
int ppl6::CMCrypt::SetKey ( const CVar object)
Beschreibung:
Mit dieser Funktion wird der Schlüssel definiert, mit dem die Daten verschlüsselt oder entschlüsselt werden sollen. Die maximale Länge des Schlüssels hängt vom Algorithmus ab, und muss daher vorher mit der Funktion CMCrypt::GetMaxKeySize() abgefragt werden.
Parameter
objectEin von CVar abgeleitetes Objekt, das den Schlüssel enthält. Unterstützt werden CString, CWString und CBinary.
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, im Fehlerfall 0
Zu beachten
Die Funktion nimmt auch längere Schlüssel an, jedoch wird er bei Aufruf von Crypt oder Decrypt bei der maximalen Länge abgeschnitten. Das kann unter umständen zu Problemen führen, wenn zur Verschlüsselung oder Entschlüsselung auch andere Programme eingesetzt werden. Es wird daher empfohlen die maximale Länge durch Aufruf von CMCrypt::GetMaxKeySize abzufragen und einen passenden Schlüssel zu verwenden.

Dokumentation der Datenelemente

ppl6::CMCrypt::IV
private
ppl6::CMCrypt::Key
private
ppl6::CMCrypt::mcrypt
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: