DECRYPT_BIN and DECRYPT_CHAR (Skalarfunktion)
Die Funktionen DECRYPT_BIN und DECRYPT_CHAR geben beide einen Wert zurück, der das Ergebnis der Entschlüsselung von verschlüsselte Datenist.
Das Schema ist SYSIBM.
Das für die Entschlüsselung verwendete Kennwort ist entweder der Wert für password-string-expression oder der Wert für das Verschlüsselungskennwort, der durch die Anweisung SET ENCRYPTION PASSWORD zugeordnet wurde. Um die beste Sicherheitsstufe auf Ihrem System beizubehalten, wird empfohlen, das Verschlüsselungskennwort nicht explizit mit den Funktionen DECRYPT_BIN und DECRYPT_CHAR in Ihrer Abfrage zu übergeben. Verwenden Sie stattdessen die Anweisung SET ENCRYPTION PASSWORD, um das Kennwort festzulegen. Verwenden Sie eine Hostvariable oder dynamische Parametermarken, wenn Sie die Anweisung SET ENCRYPTION PASSWORD anstelle einer Literalzeichenfolge verwenden.
Die Funktionen DECRYPT_BIN und DECRYPT_CHAR können nur Werte entschlüsseln, die mit der Funktion ENCRYPT verschlüsselt wurden (SQLSTATE 428FE).
- verschlüsselte Daten
- Ein Ausdruck, der einen CHAR FOR BIT DATA-oder VARCHAR FOR BIT DATA-Wert als vollständige verschlüsselte Datenzeichenfolge zurückgibt. Die Datenzeichenfolge muss mit der Funktion ENCRYPT verschlüsselt worden sein. kennwortzeichenfolgeausdruck
- Ein Ausdruck, der einen CHAR-oder VARCHAR-Wert mit mindestens 6 Byte und nicht mehr als 127 Byte zurückgibt (SQLSTATE 428FC). Dieser Ausdruck muss dasselbe Kennwort sein, das zum Verschlüsseln der Daten verwendet wird (SQLSTATE 428FD). Wenn der Wert des Kennwortarguments null oder nicht angegeben ist, werden die Daten mit dem Verschlüsselungskennwortwert entschlüsselt, der der Sitzung durch die Anweisung SET ENCRYPTION PASSWORD zugeordnet wurde (SQLSTATE 51039).
Das Ergebnis der Funktion DECRYPT_BIN ist VARCHAR FOR BIT DATA. Das Ergebnis der Funktion DECRYPT_CHAR ist VARCHAR. Wenn encrypted-data einen Hinweis enthält, wird der Hinweis nicht von der Funktion zurückgegeben. Das Längenattribut des Ergebnisses ist die Länge des Datentyps von verschlüsselte Daten minus 8 Byte. Die tatsächliche Länge des von der Funktion zurückgegebenen Werts stimmt mit der Länge der ursprünglichen Zeichenfolge überein, die verschlüsselt wurde. Wenn verschlüsselte Daten Byte über die verschlüsselte Zeichenfolge hinaus enthält, werden diese Byte von der Funktion nicht zurückgegeben.
Wenn das erste Argument null sein kann, kann das Ergebnis null sein. Wenn das erste Argument null ist, ist das Ergebnis der Nullwert.
Wenn die Daten auf einem anderen System entschlüsselt werden, das eine Codepage verwendet, die sich von der Codepage unterscheidet, in der die Daten verschlüsselt wurden, kann eine Erweiterung auftreten, wenn der entschlüsselte Wert in die Datenbankcodepage konvertiert wird. In solchen Situationen sollte der Wert für verschlüsselte Daten in eine VARCHAR-Zeichenfolge mit einer größeren Anzahl von Byte umgesetzt werden.
Beispiele
- Beispiel 1: Das folgende Beispiel veranschaulicht die Verwendung der Funktion DECRYPT_CHAR durch die Anzeige von Codefragmenten aus einer eingebetteten SQL-Anwendung.
EXEC SQL BEGIN DECLARE SECTION; char hostVarCreateTableStmt[100]; char hostVarSetEncPassStmt[200]; char hostVarPassword[128]; char hostVarInsertStmt1[200]; char hostVarInsertStmt2[200]; char hostVarSelectStmt1[200]; char hostVarSelectStmt2[200]; EXEC SQL END DECLARE SECTION; /* prepare the statement */ strcpy(hostVarCreateTableStmt, "CREATE TABLE EMP (SSN VARCHAR(24) FOR BIT DATA)"); EXEC SQL PREPARE hostVarCreateTableStmt FROM :hostVarCreateTableStmt; /* execute the statement */ EXEC SQL EXECUTE hostVarCreateTableStmt; - Beispiel 2: Verwenden Sie die Anweisung SET ENCRYPTION PASSWORD, um ein Verschlüsselungskennwort für die Sitzung festzulegen:
/* prepare the statement with a parameter marker */ strcpy(hostVarSetEncPassStmt, "SET ENCRYPTION PASSWORD = ?"); EXEC SQL PREPARE hostVarSetEncPassStmt FROM :hostVarSetEncPassStmt; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarSetEncPassStmt USING :hostVarPassword; /* prepare the statement */ strcpy(hostVarInsertStmt1, "INSERT INTO EMP(SSN) VALUES ENCRYPT('289-46-8832')"); EXEC SQL PREPARE hostVarInsertStmt1 FROM :hostVarInsertStmt1; /* execute the statement */ EXEC SQL EXECUTE hostVarInsertStmt1; /* prepare the statement */ strcpy(hostVarSelectStmt1, "SELECT DECRYPT_CHAR(SSN) FROM EMP"); EXEC SQL PREPARE hostVarSelectStmt1 FROM :hostVarSelectStmt1; /* execute the statement */ EXEC SQL EXECUTE hostVarSelectStmt1;Diese Abfrage gibt den Wert '289-46-8832' zurück.
- Beispiel 3:Übergeben Sie das Verschlüsselungskennwort explizit:
/* prepare the statement */ strcpy(hostVarInsertStmt2, "INSERT INTO EMP (SSN) VALUES ENCRYPT('289-46-8832',?)"); EXEC SQL PREPARE hostVarInsertStmt2 FROM :hostVarInsertStmt2; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarInsertStmt2 USING :hostVarPassword; /* prepare the statement */ strcpy(hostVarSelectStmt2, "SELECT DECRYPT_CHAR(SSN,?) FROM EMP"); EXEC SQL PREPARE hostVarSelectStmt2 FROM :hostVarSelectStmt2; /* execute the statement for hostVarPassword = 'Pac1f1c' */ strcpy(hostVarPassword, "Pac1f1c"); EXEC SQL EXECUTE hostVarSelectStmt2 USING :hostVarPassword;Diese Abfrage gibt den Wert '289-46-8832' zurück.
