ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
文字列を暗号化する(10g)(DBMS_CRYPTO.ENCRYPT)
スポンサード リンク

文字列を暗号化するには、DBMS_CRYPTO.ENCRYPTファンクションを使用します。

DBMS_CRYPTOパッケージの実行権限は、SYSユーザーしかありませんので、SYSユーザーでログインして、以下のようにDBMS_CRYPTOパッケージを実行したいユーザーに対して、EXECUTE権限を付与する必要があります。

  SYSユーザーログイン : SQLPLUS SYS/CHANGE_ON_INSTALL AS SYSDBA
  EXECUTE権限付与   : GRANT EXECUTE ON DBMS_CRYPTO TO ユーザー名;


DBMS_CRYPTO.ENCRYPT( SRC => 暗号化するデータ ,
                  TYP => 暗号化アルゴリズム ,
                  KEY => 暗号化キー );

ファンクション「DBMS_CRYPTO.ENCRYPT」は、以下の入力パラメータで指定した情報から、暗号化したRAW型データを返します。

暗号化した RAW型のサイズは、8の倍数となります。
1〜7バイトの文字列を暗号化した場合、RAW(8)で返されます。
8〜15バイトの文字列を暗号化すると、RAW(16)で返されます。
16〜23バイトの文字列を暗号化すると、RAW(24)で返されます。

入力パラメータの指定内容
 SRC : 暗号化したいデータをRAW型で指定します。(文字列はRAW型に変換します)

 TYP : 暗号化アルゴリズムを指定します。詳細は、以下の表を参照する。

 KEY : 暗号化キーデータをRAW型で指定します。
       暗号化キーは、暗号化と復号化で同じ情報を指定する必要があります。


● 暗号化アルゴリズムに、下記の(1)暗号化アルゴリズム、(2)ブロック暗号連鎖、(3)ブロック暗号パディングの組み合わせで指定します。

例えば、以下の組み合わせの場合、ENCRYPT_DES+CHAIN_CBC+PAD_PKCS5で指定します。
   暗号化アルゴリズム   : DES
   ブロック暗号連鎖     : CCB
   ブロック暗号パディング : PKCS

上記の暗号化の組み合わせは、(4)暗号化定義のセット で定義されている定数の 「DES_CBC_PKCS5」を指定することでも、同様の暗号化アルゴリズムが指定できます。


スポンサード リンク


(1)暗号化アルゴリズム
名前 説明
ENCRYPT_DES DES
ENCRYPT_3DES_2KEY トリプルDES。2つのキーを使用してDESを3回処理します。
ENCRYPT_3DES トリプルDES。DESを3回処理します。
ENCRYPT_AES128 AES。128ビットのキーを使用します。
ENCRYPT_AES192 AES。192ビットのキーを使用します。
ENCRYPT_AES256 AES。256ビットのキーを使用します。
ENCRYPT_RC4 個々のセッション単位でランダムに生成される秘密鍵を使用します。

(2)ブロック暗号連鎖
名前 説明
CHAIN_ECB ECBで暗号化します。
CHAIN_CBC CBCで暗号化します。
CHAIN_CFB CFBで暗号化します。
CHAIN_OFB OFBで暗号化します。

(3)ブロック暗号パディング
名前 説明
PAD_PKCS5 PKCSでパディングします。
PAD_NONE パディングを実行しないオプションです。
PAD_ZERO 0(ゼロ)をパディングします。

(4)暗号化定義のセット
名前 説明
DES_CBC_PKCS5 ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5
DES3_CBC_PKCS5 ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5


例1) 引数で渡された文字列を暗号化したRAW型データを返します。( ストアドファンクション )
create or replace function get_encrypt_data(in_string in varchar2)
return raw as

  -- SJISコード文字列「in_string」をRAW型に変換する。
 in_data raw(128) := utl_i18n.string_to_raw(in_string, 'ja16sjis');
 -- ASCIIコード暗号化キー文字列「ENCRYPT_KEY」をRAW型に変換する。
 key_data raw(128) := utl_i18n.string_to_raw('ENCRYPT_KEY', 'us7ascii');
 encrypted_data raw(128);

begin

  encrypted_data :=
    dbms_crypto.encrypt( src => in_data,
               typ => dbms_crypto.des_cbc_pkcs5,
             key => key_data );
 return encrypted_data;

end;

このファンクションで使用した暗号化アルゴリズム「dbms_crypto.des_cbc_pkcs5」は以下になります。
    暗号化アルゴリズム  : DES
    パディング方式      : PKC5手法でパディング
    ブロック暗号連鎖モード : CCBを用いて暗号化


スポンサード リンク

スリープする(DBMS_LOCK.SLEEP)
文字列を暗号化する(10g)( DBMS_CRYPTO.ENCRYPT )
文字列を復号化する(10g)( DBMS_CRYPTO.DECRYPT )
PL/SQLコードを隠蔽(暗号化)する(WRAP)
ランダムな数値や文字列を取得する( DBMS_RANDOM )
アラート通知(DBMS_ALERT)
ジョブスケジューリング(DBMS_JOB)
ロック(排他制御)を取得する(DBMS_LOCK)

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ