MemEncrypt
obj -> MemEncrypt(int1, alpha2, alpha3[, int4[, int5[, handle6[, int7[, handle8[, handle9[, handle10]]]]]]]) : int
Speicherbereich verschlüsseln
Details
- obj: Klartext / Chiffrat ( Memory -Objekt)
- int1: Optionen (siehe Text)
- alpha2: Schlüssel
- alpha3: Initialisierungsvektor
- int4: Klartextposition
- int5: Klartextlänge
- handle6: Chiffrat ( Memory -Objekt)
- int7: Chiffratposition
- 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 oder der falsche Schlüsseltyp bei asymmetrischen Schlüsseln wurde angegeben_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 - Siehe: Verwandte Befehle ,
MemDecrypt (), Blog
Dieser Befehl verschlüsselt den Inhalt des Memory-Objektes (obj).
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üsselBei Verwendung des privaten Schlüssels erzeugt der gleiche Klartext immer das gleiche Chiffrat
-
_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 anwenden ( nicht in Verbindung mit_MemCipherRSA) -
_MemPaddingRSAPkcs1: PKCS#1 Padding anwenden ( nur in Verbindung mit_MemCipherRSA). Dieser Modus ist weit verbreitet. -
_MemPaddingRSAOaep: OAEP Padding anwenden ( 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 verschlüsselnde Nachricht 16 Byte lang oder ein Vielfaches davon sein.
Bei der Verschlüsselung mit _MemCipherRSA muss ein Padding (_MemPaddingRSA...) angegeben werden. Das Padding füllt den Rest der zu verschlüsselnden Nachricht auf die Schlüsselbitlänge auf. Für das Padding werden mindestens die folgende Anzahl an Zeichen benötigt:
_MemPaddingRSAPkcs1: 11 Zeichen_MemPaddingRSAOaep: 42 Zeichen
Auch wenn der zu verschlüsselnde Klartext im Memory-Objekt nur aus darstellbaren Zeichen besteht, kann das Chiffrat aus nichtdarstellbaren Zeichen (binären Daten) bestehen.
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. Dieser dient dazu, dass die gleiche Nachricht mit dem gleichen Schlüssel nicht das gleiche Ergebnis liefert. Der Initialisierungsvektor sollte zufällig generiert und nicht mehrfach genutzt werden. 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 verschlüsselnden Daten in (obj) angegeben.
In (handle6) kann ein Ziel- Memory -Objekt angegeben werden, in dass das Chiffrat gespeichert wird. Ist dieses nicht angegeben, erfolgt die Speicherung in (obj).
Die Zielposition des Chiffrats in (handle6) bzw. (obj) kann im Argument (int7) angegeben werden. 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 wird das Authentifikations-Tag geschrieben, welches bei MemDecrypt () zur Authentifizierung der verschlüsselten Nachricht angegeben werden muss. 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 Memory -Objekt für das Authentifikations-Tag (handle10) angegeben._ErrStringOverflow: Der Plaintext (obj) ist bei der RSA-Verschlüsselung zusammen mit dem Padding länger als der Schlüssel (alpha2) bzw. (handle8)._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.