すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_CRYPTO

最終更新日:Jun 12, 2025

DBMS_CRYPTO パッケージは、RAW、BLOB、または CLOB データの暗号化または復号に使用できる関数とストアドプロシージャを提供します。DBMS_CRYPTO パッケージの関数を使用して、強力暗号化乱数を生成できます。

DBMS_CRYPTO パッケージの関数とストアドプロシージャ

関数またはストアドプロシージャ

戻り値の型

説明

DECRYPT(src, typ, key, iv)

RAW

RAW データを復号します。

DECRYPT(dst INOUT, src, typ, key, iv)

N/A

BLOB データを復号します。

DECRYPT(dst INOUT, src, typ, key, iv)

N/A

CLOB データを復号します。

ENCRYPT(src, typ, key, iv)

RAW

RAW データを暗号化します。

ENCRYPT(dst INOUT, src, typ, key, iv)

N/A

BLOB データを暗号化します。

ENCRYPT(dst INOUT, src, typ, key, iv)

N/A

CLOB データを暗号化します。

HASH(src, typ)

RAW

RAW データにハッシュアルゴリズムを適用します。

HASH(src)

RAW

CLOB データにハッシュアルゴリズムを適用します。

MAC(src, typ, key)

RAW

指定されたハッシュアルゴリズムとキーを使用して、指定された RAW データのハッシュベースのメッセージ認証コード (HMAC) 値を返します。

MAC(src, typ, key)

RAW

指定されたハッシュアルゴリズムとキーを使用して、指定された CLOB データの HMAC 値を返します。

RANDOMBYTES(number bytes)

RAW

強力暗号化のランダムなバイトシーケンスを含む RAW 値を返します。

RANDOMINTEGER()

INTEGER

ランダムな整数を返します。

RANDOMNUMBER()

NUMBER

乱数を返します。

注意事項

  • Oracle データベースと同様に、PolarDB for Oracle は以下のエラーメッセージをサポートしています。

    ORA-28239 - DBMS_CRYPTO.KeyNull
    ORA-28829 - DBMS_CRYPTO.CipherSuiteNull
    ORA-28827 - DBMS_CRYPTO.CipherSuiteInvalid
  • Oracle データベースとは異なり、PolarDB は、既に暗号化された情報を暗号化しようとすると、エラー ORA-28233 を返しません。

  • RAW と BLOB は PostgreSQL BYTEA データ型のシノニムであり、CLOB は TEXT のシノニムであることに注意してください。

DECRYPT

DECRYPT 関数またはストアドプロシージャを使用して、指定された暗号化アルゴリズム、キー、およびオプションの初期化ベクトルに基づいてデータを復号できます。

  • DECRYPT 関数の構文

    DECRYPT
      (src IN RAW, typ IN INTEGER, key IN RAW, iv IN RAW 
       DEFAULT NULL) RETURN RAW      
  • DECRYPT ストアドプロシージャの構文

    DECRYPT
      (dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW, 
       iv IN RAW DEFAULT NULL)

    または

    DECRYPT
      (dst INOUT CLOB, src IN CLOB, typ IN INTEGER, key IN RAW, 
       iv IN RAW DEFAULT NULL) 
説明

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

パラメーター

パラメーター

説明

dst

BLOB データの名前を指定します。DECRYPT ストアドプロシージャは、出力内容を BLOB に書き込み、BLOB 内の既存のデータを上書きします。

src

復号するソースデータを指定します。

  • DECRYPT を関数として呼び出す場合は、RAW データを指定する必要があります。

  • DECRYPT をストアドプロシージャとして呼び出す場合は、BLOB または CLOB データを指定する必要があります。

type

ブロック暗号の型と修飾子を指定します。このパラメーターの値は、ソースデータの暗号化時に指定されたデータ型と一致する必要があります。

key

ユーザー定義の復号キーを指定します。このパラメーターの値は、ソースデータの暗号化時に指定されたキーと一致する必要があります。

iv

初期化ベクトルを指定します。ソースデータの暗号化時に初期化ベクトルを指定した場合は、ソースデータの復号時にこのパラメーターを指定する必要があります。デフォルト値:NULL。

表 1. サポートされているブロック暗号アルゴリズム

ブロック暗号アルゴリズム

説明

ENCRYPT_DES

CONSTANT INTEGER := 1;

ENCRYPT_3DES

CONSTANT INTEGER := 3;

ENCRYPT_AES

CONSTANT INTEGER := 4;

ENCRYPT_AES128

CONSTANT INTEGER := 6;

表 2. サポートされているブロック暗号修飾子

ブロック暗号修飾子

説明

CHAIN_CBC

CONSTANT INTEGER := 256;

CHAIN_ECB

CONSTANT INTEGER := 768;

表 3. サポートされているブロック暗号パディング修飾子

ブロック暗号パディング修飾子

説明

PAD_PKCS5

CONSTANT INTEGER := 4096;

PAD_NONE

CONSTANT INTEGER := 8192;

表 4. サポートされているブロック暗号スイート

ブロック暗号スイート

説明

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;

次の例では、DBMS_CRYPTO.DECRYPT 関数を使用して、passwords テーブルから取得した暗号化されたパスワードを復号します。

CREATE TABLE passwords
(
  principal  VARCHAR2(90) PRIMARY KEY,  -- ユーザー名
  ciphertext RAW(9)                     -- 暗号化されたパスワード
);
CREATE FUNCTION get_password(username VARCHAR2) RETURN RAW AS
 typ        INTEGER := DBMS_CRYPTO.DES_CBC_PKCS5;
 key        RAW(128) := 'my secret key';  -- 復号鍵
  iv         RAW(100) := 'my initialization vector'; -- 初期化ベクトル
 password   RAW(2048);
BEGIN

 SELECT ciphertext INTO password FROM passwords WHERE principal = username;

 RETURN dbms_crypto.decrypt(password, typ, key, iv);
END;
説明

DECRYPT を呼び出すときに、オブジェクトの暗号化に使用したものと同じパスワードタイプ、キー値、および初期化ベクトルを使用する必要があります。

ENCRYPT

ENCRYPT 関数またはストアドプロシージャを使用して、ユーザー定義のアルゴリズム、キー、およびオプションの初期化ベクトルに基づいて RAW、BLOB、または 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) 

ENCRYPT をストアドプロシージャとして呼び出すと、ENCRYPT は BLOB または CLOB データをユーザー指定の BLOB に返します。

パラメーター

パラメーター

説明

dst

BLOB データの名前を指定します。ENCRYPT ストアドプロシージャは、出力内容を BLOB に書き込み、BLOB 内の既存のデータを上書きします。

src

暗号化するソースデータを指定します。

  • ENCRYPT を関数として呼び出す場合は、RAW データを指定する必要があります。

  • ENCRYPT をストアドプロシージャとして呼び出す場合は、BLOB または CLOB データを指定する必要があります。

typ

ブロック暗号の型と修飾子を指定します。PolarDB は、以下のテーブルにあるブロック暗号アルゴリズム、修飾子、および暗号スイートをサポートしています。

key

暗号鍵を指定します。

iv

初期化ベクトルを指定します。デフォルト値:NULL。

表 5. サポートされているブロック暗号アルゴリズム

ブロック暗号アルゴリズム

説明

ENCRYPT_DES

CONSTANT INTEGER := 1;

ENCRYPT_3DES

CONSTANT INTEGER := 3;

ENCRYPT_AES

CONSTANT INTEGER := 4;

ENCRYPT_AES128

CONSTANT INTEGER := 6;

表 6. サポートされているブロック暗号修飾子

ブロック暗号修飾子

説明

CHAIN_CBC

CONSTANT INTEGER := 256;

CHAIN_ECB

CONSTANT INTEGER := 768;

表 7. サポートされているブロック暗号パディング修飾子

ブロック暗号パディング修飾子

説明

PAD_PKCS5

CONSTANT INTEGER := 4096;

PAD_NONE

CONSTANT INTEGER := 8192;

表 8. サポートされているブロック暗号スイート

ブロック暗号スイート

説明

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;

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

CREATE TABLE passwords
(
 principal  VARCHAR2(90) PRIMARY KEY,  -- ユーザー名
 ciphertext RAW(9)                     -- 暗号化されたパスワード
);
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;

パスワードを暗号化する時に、ENCRYPT は my secret key をキーとして、my initialization vector を初期化ベクトルとして使用します。パスワードの復号化時には、暗号化の時と同じキーと初期化ベクトルを使用する必要があります。

HASH

HASH 関数を使用して、ユーザー指定のハッシュアルゴリズムにより RAW または CLOB データのハッシュ値を返すことができます。 HASH 関数の構文

HASH
 (src IN RAW, typ IN INTEGER) RETURN RAW
HASH
 (src IN CLOB, typ IN INTEGER) RETURN RAW 

パラメーター

パラメーター

説明

src

ハッシュ値が計算されるデータを指定します。RAW、BLOB、または CLOB データ型がサポートされています。

typ

ハッシュアルゴリズムを指定します。PolarDB でサポートされているハッシュアルゴリズムの詳細については、「サポートされているハッシュアルゴリズム」をご参照ください。

表 9. サポートされているハッシュアルゴリズム

ハッシュアルゴリズム

説明

HASH_MD4

CONSTANT INTEGER := 1;

HASH_MD5

CONSTANT INTEGER := 2;

HASH_SH1

CONSTANT INTEGER := 3;

次の例では、DBMS_CRYPTO.HASH 関数を使用して、cleartext source 文字列の MD5 ハッシュ値を取得します。

DECLARE
  typ        INTEGER := DBMS_CRYPTO.HASH_MD5;  -- タイプ
  hash_value RAW(100);                        -- ハッシュ値
BEGIN

  hash_value := DBMS_CRYPTO.HASH('cleartext source', typ); -- クリアテキスト ソースのハッシュ値を計算

END;

MAC

MAC 関数を使用して、RAW または CLOB データの HMAC 値を返すことができます。 MAC 関数の構文

MAC
  (src IN RAW, typ IN INTEGER, key IN RAW) RETURN RAW
MAC
  (src IN CLOB, typ IN INTEGER, key IN RAW) RETURN RAW
MAC 
  (src IN BLOB, typ IN INTEGER, key IN RAW) RETURN RAW

パラメーター

パラメーター

説明

src

HMAC 値が計算されるデータを指定します。RAW、BLOB、または CLOB データ型がサポートされています。

typ

MAC 関数の型を指定します。PolarDB でサポートされている MAC 関数の詳細については、「MAC 関数」をご参照ください。

key

HMAC 値の計算に使用するキーを指定します。

表 10. MAC 関数

MAC 関数

説明

HMAC MD5

CONSTANT INTEGER := 1;

HMAC SH1

CONSTANT INTEGER := 2;

次の例では、DBMS_CRYPTO.MAC を使用して cleartext source 文字列の HMAC 値を取得します。

DECLARE
  typ       INTEGER := DBMS_CRYPTO.HMAC_MD5;
  key       RAW(100) := 'my secret key';  // キー
  mac_value RAW(100);
BEGIN

  mac_value := DBMS_CRYPTO.MAC('cleartext source', typ, key);

END;

DBMS_CRYPTO.MAC は my secret key をキーとして使用します。

RANDOMBYTES

RANDOMBYTES 関数を使用して、暗号化のランダムなバイトシーケンスを含む RAW 値を返すことができます。 RAW 値の長さを指定できます。 RANDOMBYTES の構文

RANDOMBYTES
  (number_bytes IN INTEGER) RETURNS RAW

パラメーター

パラメーター

説明

number bytes

返されるバイト数を指定します。

次の例では、RANDOMBYTES を使用して、長さが 1,024 バイトの値を返します。

DECLARE
  result RAW(1024);
BEGIN
  /* 1024 バイトのランダムなバイト列を生成 */
  result := DBMS_CRYPTO.RANDOMBYTES(1024);
END;

RANDOMINTEGER

RANDOMINTEGER 関数を使用して、Oracle BINARY_INTEGER データ型の使用できる範囲内のランダムな整数を返すことができます。 RANDOMINTEGER の構文

RANDOMINTEGER() RETURNS INTEGER

次の例では、RANDOMINTEGER 関数を使用して、暗号化のランダムな整数を返します。

DECLARE
  result INTEGER;
BEGIN
  result := DBMS_CRYPTO.RANDOMINTEGER(); -- ランダムな整数を生成
  DBMS_OUTPUT.PUT_LINE(result); -- 結果を出力
END;

RANDOMNUMBER

RANDOMNUMBER 関数を使用して、Oracle NUMBER データ型の [0..2**128-1] 範囲内の数を返すことができます。 RANDOMNUMBER の構文

RANDOMNUMBER() RETURNS NUMBER

次の例では、RANDOMNUMBER 関数を使用して、暗号化乱数を返します。

DECLARE
  result NUMBER;
BEGIN
  result := DBMS_CRYPTO.RANDOMNUMBER();
  DBMS_OUTPUT.PUT_LINE(result);
END;
/* 次の例では、RANDOMNUMBER 関数を使用して、暗号的に安全な乱数を返します。 */