Funktionsgruppe: Kryptografische Funktion
DECRYPT() entschlüsselt Zeichenketten nach dem AES-Algorithmus mit einem Schlüssel (key) von 128 Bit (16 Bytes) im Electronic Codebook Mode (ECM) in den entsprechenden Wert eines vorgegebenen Datentyps.
DECRYPT (
ausdruck ,
schlüssel ,
datentyp )
ausdruck
Gibt den Wert an, der entschlüsselt werden soll.
Der Wert muss vom alphanumerischen Datentyp CHARACTER oder CHARACTER VARYING sein.
ausdruck darf kein multipler Wert mit Dimension > 1 sein.
Die Länge von ausdruck muss ein ganzzahliges Vielfaches von 16 und größer als 0 sein. Auch ein NULL-Wert ist erlaubt.
schlüssel
Schlüssel, mit dem der Wert von ausdruck entschlüsselt werden soll.
Alphanumerische Zeichenkette mit einer Länge von 16 Zeichen, also vom Datentyp CHARACTER(16) oder CHARACTER VARYING(n) mit n >= 16.
Außerdem ist der NULL-Wert eines dieser Datentypen zulässig.
Für ein korrektes Ergebnis muss der Schlüssel derselbe sein, der auch für die Verschlüsselung mit ENCRYPT() verwendet wurde.
datentyp
Datentyp des entschlüsselten Wertes (ohne dimension-Angabe). Die erlaubten Datentypen hängen von der (maximalen) Länge des Datentyps von ausdruck ab, siehe die Tabelle auf der nächsten Seite.
Ergebnis
Wenn der Wert von ausdruck oder von schlüssel der NULL-Wert ist, dann ist das Ergebnis der NULL-Wert.
Sonst:
Der entschlüsselte Wert von ausdruck im angegebenen Datentyp, siehe Tabelle auf der nächsten Seite. Zu möglichen Fehlern siehe „Fehlerfälle".
Datentyp: der angegebene datentyp
Datentyp von ausdruck | datentyp und Datentyp des Ergebnisses |
CHAR(m), VARCHAR(>= m) 1 | CHAR(n), falls n <= 256 2 |
CHAR(m), VARCHAR(>= m) 1 | VARCHAR(n) 2 |
CHAR(m), VARCHAR(>= m) 1 | NCHAR(n) 3 |
CHAR(m), VARCHAR(>= m) 1 | NVARCHAR(n) 3 |
CHAR(16), VARCHAR(>= 16) | SMALLINT, INTEGER |
CHAR(16), VARCHAR(>= 16) | NUMERIC (bis 14 Stellen) |
CHAR(32), VARCHAR(>= 32) | NUMERIC (15 bis 30 Stellen) |
CHAR(48), VARCHAR(>= 48) | NUMERIC (31 Stellen) |
CHAR(16), VARCHAR(>= 16) | DECIMAL (bis 27 Stellen) |
CHAR(32), VARCHAR(>= 32) | DECIMAL (28 bis 31 Stellen) |
CHAR(16), VARCHAR(>= 16) | FLOAT, REAL, DOUBLE PRECISION |
CHAR(16), VARCHAR(>= 16) | DATE, TIME(3), TIMESTAMP(3) |
Tabelle 13: Erlaubte Kombinationen bei DECRYPT()
1m muss >= 16 und ein ganzzahliges Vielfaches von 16 sein
2Die Länge n muss >= 1 sein und zwischen (m - 17) und (m -2) liegen (inklusive)
3Die Länge n muss >= 1 sein und zwischen (m/2 - 1) und (m/2 - 8) liegen (inklusive)
Beispiele
Entschlüsselung in einem SELECT-Ausdruck:
SELECT DECRYPT(lsatz_encr,'0123456789ABCDEF',NUMERIC(5,0))
AS test_decr FROM leistung
Mit der Funktion VALUE_OF_REP lassen sich auch einzelne Werte einer gemeinsam verschlüsselten Zeichenkette entschlüsseln (siehe auch "ENCRYPT() - Daten verschlüsseln"):
VALUE_OF_REP (SUBSTRING (DECRYPT (gehaltundbonus, :schluessel, CHAR(12)) FROM 7 FOR 6), NUMERIC(6)) AS bonus
Fehlerfälle
Bei der Ausführung der DECRYPT-Funktion können folgende Fehler auftreten:
Die Länge der verschlüsselten Zeichenkette ist 0 oder kein ganzzahliges Vielfaches von 16.
Der Schlüssel schlüssel ist eine Zeichenkette mit Länge ungleich 16 oder es ist nicht derselbe Schlüssel, der zum Verschlüsseln verwendet wurde.
Der entschlüsselte Wert passt nicht zum angegebenen Datentyp des Ergebnisses (wenn z.B. ein SMALLINT-Wert veschlüsselt wurde, aber in der DECRYPT-Funktion als Ergebnistyp INTEGER angegeben wurde (oder umgekehrt)).
Allerdings wird bei der Ausführung der DECRYPT-Funktion nicht geprüft, dass der entschlüsselte Wert genau denselben Datentyp bekommt den der verschlüsselte Wert hatte. Verschlüsselt und entschlüsselt wird nur die interne Darstellung von Werten, aber keine zusätzliche Information.
So haben zum Beispiel in SESAM/SQL die Werte ungleich NULL der Datentypen INTEGER, CHARACTER(4), NUMERIC(4,0), DECIMAL(7,2) und REAL alle eine interne Darstellung mit genau 4 Bytes. Es kann daher ein Wert vom Datentyp INTEGER verschlüsselt und zu einem Wert vom Typ CHAR(4) oder REAL entschlüsselt werden. Auch wenn zu einem Wert vom Typ NUMERIC(4,0) entschlüsselt wird, liefert die DECRYPT-Funktion keinen Fehler. Je nach entschlüsseltem Wert kann aber bei einer nachfolgenden arithmetischen Operation ein Fehler auftreten.