MemDecrypt
obj -> MemDecrypt(int1, alpha2, alpha3[, int4[, int5[, handle6[, int7[, handle8[, handle9[, handle10]]]]]]]) : int
Speicherbereich entschlüsseln
Details
- obj: Chiffrat / Klartext ( Memory -Objekt)
- int1: Optionen (siehe Text)
- alpha2: Schlüssel
- alpha3: Initialisierungsvektor
- int4: Chiffratposition
- int5: Chiffratlänge
- handle6: Klartext ( Memory -Objekt)
- int7: Klartextposition
- handle8: Schlüssel ( Memory -Objekt)
- handle9: Initialisierungsvektor ( Memory -Objekt)
- handle10: Authentifikations-Tag für GCM ( Memory -Objekt)
- Resultat:
intFehlerwert_ErrOkErfolg_ErrMemKeyInvalidSchlüssel ist ungültig_ErrMemKeyLengthSchlüssel ist zu kurz oder zu lang für den Algorithmus_ErrMemIVInvalidInitialisierungsvektor ist ungültig_ErrMemIVLengthInitialisierungsvektor ist zu kurz oder zu lang für den Algorithmus_ErrMemDecryptEntschlüsselung ist fehlgeschlagen - Siehe: Verwandte Befehle ,
MemEncrypt (), Blog
Dieser Befehl entschlüsselt den Inhalt des Memory-Objektes (obj). Es müssen der gleiche Schlüssel und Initialisierungsvektor angegeben werden, der auch beim Verschlüsseln verwendet wurde.
Folgende Optionen (int1) sind möglich:
-
Verschlüsselungsalgorithmus
-
_MemCipherAES128: 128-Bit-Verschlüsselung mit AES -
_MemCipherAES192: 192-Bit-Verschlüsselung mit AES -
_MemCipherAES256: 256-Bit-Verschlüsselung mit AES -
_MemCipherRSA: Verschlüsselung mit RSA -
Verschlüsselungsmodus (nicht in Verbindung mit
_MemCipherRSA) -
_MemCipherModeCBC: Betriebsmodus Cipher-block chaining -
_MemCipherModeOFB: Betriebsmodus Output feedback -
_MemCipherModeCTR: Betriebsmodus Counter Mode -
_MemCipherModeGCM: Betriebsmodus Galois/Counter Mode -
Kodierung des Schlüssels
-
_MemKeyHex: Schlüssel liegt als hexadezimal kodierte Zeichenkette vor (alpha2) -
_MemKeyBase64: Schlüssel liegt Base64-kodierte Zeichenkette vor (alpha2) -
_MemKeyMem: Schlüssel liegt binär vor (handle8) -
Typ des asymmetrischen Schlüssels (nur in Verbindung mit
_MemCipherRSA) -
_MemKeyAsymPrivate: Der Schlüssel (alpha2) / (handle8) ist ein privater asymmetrischer Schlüssel -
_MemKeyAsymPublic: Der Schlüssel (alpha2) / (handle8) ist ein öffentlicher asymmetrischer Schlüssel -
Kodierung des Initialisierungsvektors (nicht in Verbindung mit
_MemCipherRSA) -
_MemIVHex: Initialisierungsvektor liegt als hexadezimal kodierte Zeichenkette vor (alpha3) -
_MemIVBase64: Initialisierungsvektor liegt als Base64-kodierte Zeichenkette vor (alpha3) -
_MemIVMem: Initialisierungsvektor liegt binär vor (handle9) -
Padding-Optionen
-
_MemCipherNoPadding: Kein Padding voraussetzen ( nicht in Verbindung mit_MemCipherRSA) -
_MemPaddingRSAPkcs1: PKCS#1 Padding voraussetzen ( nur in Verbindung mit_MemCipherRSA). Dieser Modus ist weit verbreitet. -
_MemPaddingRSAOaep: OAEP Padding voraussetzen ( nur in Verbindung mit_MemCipherRSAund_MemKeyAsymPublic). Dieser Modus sollte für neue Projekte verwendet werden.
Der Paramter (int1) setzt sich aus der Kombination je einer Konstanten der Bereiche Verschlüsselungsalgorithmus, Verschlüsselungsmodus, Kodierung des Schlüssels und Kodierung des Initialisierungsvektors zusammen. Diese können zusätzlich mit den Padding-Optionen kombiniert werden.
Wird die Option _MemCipherNoPadding verwendet, muss die zu entschlüsselnde Nachricht 16 Byte lang oder ein Vielfaches davon sein.
Bei der Entschlüsselung mit _MemCipherRSA muss ein Padding (_MemPaddingRSA...) angegeben werden.
Der Schlüssel wird in (alpha2) bzw. (handle8) angegeben. Je nach Verschlüsselungsalgorithmus muss der Schlüssel eine bestimmte Länge haben:
- Algorithmus: Schlüssellänge (Rohdaten)
_MemCipherAES128: 128 Bit (16 Byte)_MemCipherAES192: 192 Bit (24 Byte)_MemCipherAES256: 256 Bit (32 Byte)_MemCipherRSA: Die Verschlüsselungsstärke hängt von der Schlüssellänge ab.
Im Gegensatz zu _MemCipherAES... , wo der Schlüssel aus zufälligen Zeichen besteht, muss bei _MemCipherRSA ein gültiger Schlüssel eines Schlüsselpaares angegeben werden. Dieses Schlüsselpaar kann beispielsweise mit MemGenKeyPair () oder OpenSSL erzeugt werden. Die maximale Länge der verschlüsselbaren Zeichenkette hängt hierbei vom gewählten Padding und der Bitlänge des Schlüssels ab. Der asymmetrische Schlüssel muss im PKCS #1- oder im X.509-Format vorliegen. Die Begin- und Endmarkierung dürfen nicht enthalten sein.
Die Ver- und Entschlüsselung mit RSA nimmt wesentlich mehr Zeit in Anspruch als mit AES. Um große Datenmengen zu verschlüsseln sollte ein zufälliger AES-Schlüssel generiert werden, der mit RSA verschlüsselt wird. Der eigentliche Klartext wird mit AES verschlüsselt.
Der Initialisierungsvektor wird in (alpha3) bzw. (handle9) angegeben. Die Länge vom Initialisierungsvektor ist abhängig von der Blocklänge des Verschlüsselungsalgorithmus. Bei AES sind dies 128 Bit (16 Byte). Der Initialisierungsvektor muss nicht geheim gehalten werden. Bei _MemCipherRSA wird der Initialisierungsvektor nicht verwendet.
In (int4) und (int5) wird die Position und die Länge der zu entschlüsselnden Daten in (obj) angegeben.
In (handle6) kann ein Ziel- Memory -Objekt angegeben werden, in dass der Klartext gespeichert wird. Ist dieses nicht angegeben, erfolgt die Speicherung in (obj).
Die Zielposition des Klartextes in (handle6) bzw. (obj) kann im Argument (int7) angegeben. Ist das Argument nicht gesetzt, wird an den Anfang des Memory -Objektes geschrieben.
In (handle10) muss ein Memory -Objekt angegeben werden, wenn als Option (int1) _MemCipherModeGCM angegeben ist. In dieses Memory -Objekt muss zuvor das Authentifikations-Tag geschrieben, welches bei MemEncrypt () ermittelt wurde. Dieses Tag ist 16 Byte lang.
Mögliche Laufzeitfehler:
_ErrHdlInvalid: Einer der übergeben Deskriptoren (obj), (handle6), (handle8), (handle9) oder (handle10) ist ungültig._ErrMemExhausted: Nicht genug Speicher vorhanden._ErrNoArgument: Bei der Option_MemKeyMemwurde kein Schlüssel (handle8), bei_MemIVMemkein Initialisierungsvektor (handle9) oder bei_MemCipherModeGCMkein Authentifikations-Tag (handle10) angegeben._ErrValueInvalid: In den Optionen (int1) wurde eine ungültige oder unvollständige Kombination angegeben._ErrValueRange: Eine der Längen- oder Positionsangaben (int4), (int5) oder (int7) ist ungültig.