DECRYPT_BIN および DECRYPT_CHAR スカラー関数

DECRYPT_BIN 関数と DECRYPT_CHAR 関数はどちらも、 encrypted-data 暗号化解除の結果である値を返します。

重要: DECRYPT_BIN および DECRYPT_CHAR 関数は非推奨であり、今後のリリースでは使用されない可能性があります。
構文図を読む構文図をスキップするDECRYPT_BINDECRYPT_CHAR(encrypted-data ,password-string-expression )

スキーマは SYSIBM です。

暗号化解除に使用されるパスワードは、password-string-expression、 または SET ENCRYPTION PASSWORD ステートメントで割り当てられた暗号化パスワード値のいずれかです。 システムで最高レベルのセキュリティーを維持するためには、照会内で DECRYPT_BIN と DECRYPT_CHAR 関数を使用して暗号化パスワードを明示的に受け渡さずに、代わりに、SET ENCRYPTION PASSWORD ステートメントを使用してパスワードを設定し、SET ENCRYPTION PASSWORD ステートメントの使用時にリテラル・ストリングではなく、ホスト変数または動的パラメーター・マーカーを使用することをお勧めします。

DECRYPT_BIN および DECRYPT_CHAR 関数は、 ENCRYPT 関数を使って暗号化された値のみを暗号化解除できます (SQLSTATE 428FE)。

encrypted-data
CHAR FOR BIT DATA 値または VARCHAR FOR BIT DATA 値を、 暗号化された完全なデータ・ストリングとして戻す式です。 データ・ストリングは、ENCRYPT 関数を使って暗号化されたものでなければなりません。
password-string-expression
少なくとも 6 バイトで 127 バイトを超えない CHAR または VARCHAR 値を返す式です (SQLSTATE 428FC)。 この式は、データの暗号化に使用されたパスワードと同じでなければなりません (SQLSTATE 428FD)。 パスワード引数が NULL、または与えられていない場合、SET ENCRYPTION PASSWORD ステートメントによってセッションに割り当てられた暗号化パスワード値を使用してデータが暗号化解除されます (SQLSTATE 51039)。

DECRYPT_BIN 関数の結果は VARCHAR FOR BIT DATA です。 DECRYPT_CHAR 関数の結果は VARCHAR です。 encrypted-data にヒントが組み込まれている場合、そのヒントは関数によって返されません。 結果の長さ属性は、encrypted-data のデータ・タイプの長さマイナス 8 バイトになります。 関数によって実際に返される長さの値は、暗号化されたオリジナル・ストリングの長さに一致します。 暗号化ストリングを超えるバイトが encrypted-data に入っている場合、 それらのバイトは関数によって返されません。

最初の引数が NULL になる可能性がある場合、結果も NULL になる可能性があります。 最初の引数が NULL の場合には、結果も NULL 値です。

データが暗号化されたときのコード・ページとは異なるコード・ページを使用する、 別のシステムでデータが暗号化解除された場合、 暗号化解除された値をデータベース・コード・ページに変換するとき、 長さが超過してしまう可能性があります。 この場合、encrypted-data 値を より大きなバイト数の VARCHAR ストリングに cast する必要があります。

  • 例 1: 以下の例では、組み込み SQL アプリケーション内のコード部分を示して、DECRYPT_CHAR 関数の使用法を示します。
    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; 
  • 例 2: 以下のように、SET ENCRYPTION PASSWORD ステートメントを使用して、セッションの暗号化パスワードを設定します。
    /* 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; 

    この照会は、値 '289-46-8832' を返します。

  • 例 3: 以下のように、暗号化パスワードを明示的に渡します。
    
    /* 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; 

    この照会は、値 '289-46-8832' を返します。