ENCRYPT

ENCRYPT 関数または手順は、ユーザー指定のアルゴリズム、キー、およびオプションの初期化ベクトルを使用して、 RAWBLOB または CLOB データを暗号化します。 ENCRYPT 関数のシグネチャは次のとおりです。

ENCRYPT
  (<src> IN RAW, <typ> IN INTEGER, <key> IN RAW,
   <iv> IN RAW DEFAULT NULL) RETURN RAW

ENCRYPT プロシージャのシグネチャは次のとおりです。

ENCRYPT
  (<dst> INOUT BLOB, <src> IN BLOB, <typ> IN INTEGER, <key> IN RAW,
   <iv> IN RAW DEFAULT NULL)

または

ENCRYPT
  (<dst> INOUT BLOB, <src> IN CLOB, <typ> IN INTEGER, <key> IN RAW,
   <iv> IN RAW DEFAULT NULL)

プロシージャとして呼び出されると、 ENCRYPTBLOB または CLOB のデータをユーザー指定の BLOB に返します。

Parameters

dst

dst は、 ENCRYPT プロシージャの出力が書き込まれる BLOB の名前を指定します。 ENCRYPT 手順は、 dst に現在ある既存のデータを上書きします。

src

src は、暗号化されるソースデータを指定します。関数として ENCRYPT を呼び出す場合は、 RAW データを指定します。手順として ENCRYPT を呼び出す場合は、 BLOB または CLOB のデータを指定します。

typ

typ は、 ENCRYPT で使用されるブロック暗号タイプと任意の修飾子を指定します。AdvancedServerは、以下にリストされているブロック暗号アルゴリズム、修飾子、および暗号スイートをサポートしています。

Block Cipher Algorithms

ENCRYPT_DES

CONSTANT INTEGER:= 1;

ENCRYPT_3DES

CONSTANT INTEGER:= 3;

ENCRYPT_AES

CONSTANT INTEGER:= 4;

ENCRYPT_AES128

CONSTANT INTEGER:= 6;

ENCRYPT_AES192

CONSTANT INTEGER:= 192;

ENCRYPT_AES256

CONSTANT INTEGER:= 256;

Block Cipher Modifiers

CHAIN_CBC

CONSTANT INTEGER:= 256;

CHAIN_ECB

CONSTANT INTEGER:= 768;

Block Cipher Padding Modifiers

PAD_PKCS5

CONSTANT INTEGER:= 4096;

PAD_NONE

CONSTANT INTEGER:= 8192;

Block Cipher Suites

DES_CBC_PKCS5

CONSTANT INTEGER:= ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5;

DES3_CBC_PKCS5

CONSTANT INTEGER:= ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5;

AES_CBC_PKCS5

CONSTANT INTEGER:= ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5;

key

key は暗号化キーを指定します。

iv

iv (オプション)は初期化ベクトルを指定します。デフォルトでは、 ivNULL です。

Examples

次の例では、 DBMS_CRYPTO.DES_CBC_PKCS5 ブロック暗号スイート(事前定義されたアルゴリズムと修飾子のセット)を使用して、 passwords テーブルから取得した値を暗号化します。

CREATE TABLE passwords
(
  principal   VARCHAR2(90) PRIMARY KEY, -- username
  ciphertext  RAW(9) -- encrypted password
);
CREATE PROCEDURE set_password(username VARCHAR2, cleartext RAW) AS
 typ         INTEGER := DBMS_CRYPTO.DES_CBC_PKCS5;
 key         RAW(128) := 'my secret key';
 iv          RAW(100) := 'my initialization vector';
 encrypted   RAW(2048);
BEGIN
  encrypted := dbms_crypto.encrypt(cleartext, typ, key, iv);
  UPDATE passwords SET ciphertext = encrypted WHERE principal = username;
END;

ENCRYPTpassword を暗号化するときに my secret key のキー値と my initialization vector の初期化ベクトルを使用します。 password を復号化するときに同じキーと初期化ベクトルを指定します。