sql >> データベース >  >> RDS >> Oracle

PLSQLを使用してOracleでデータを暗号化する方法

    DBMS_OBFUSCATION_TOOLKITパッケージを使用してOracleのデータを暗号化および復号化するためのシンプルで安全な方法。 DBMS_OBFUSCATION_TOOLKITを使用すると、アプリケーションは、データ暗号化標準(DES)またはトリプルDESアルゴリズムのいずれかを使用してデータを暗号化できます。以下は、PLSQLを使用してOracleでデータを暗号化するためのデータベースパッケージ関数の例です。

    次のToolkitパッケージは、DBMS_OBFUSCATION_TOOLKITパッケージを使用してデータを暗号化および復号化します。

    注:カスタムシークレット暗号化方式を使用するには、このパッケージで定義されているキーを変更する必要があります。データはキーによって暗号化され、そのキーでのみ復号化できます。詳細...

    Oracleでデータを暗号化するための使用法:

    Select toolkit.encrypt('The test data 123.') From Dual;
    Shows:
    -----------
    5C8ADD7B98919FC937A53AB986782EA9EE63D4ADDF7CA322

    データを復号化するには:

    select Toolkit.decrypt('5C8ADD7B98919FC937A53AB986782EA9EE63D4ADDF7CA322') from dual;
    Shows:
    -----------
    The test data 123.
    Create Or Replace PACKAGE Toolkit As
      FUNCTION encrypt (p_text  In  VARCHAR2) RETURN RAW;
      FUNCTION decrypt (p_raw  In  RAW) RETURN VARCHAR2;
    END Toolkit;
    /
    Create Or Replace PACKAGE BODY Toolkit As
      ---- the custom key for 
      g_key     RAW(32767)  := UTL_RAW.cast_to_raw('20130417');
      ---- the custom padding character
      g_pad_chr VARCHAR2(1) := '_';
    
      PROCEDURE padstring (p_text  In OUT  VARCHAR2);
    
      FUNCTION encrypt (p_text  In  VARCHAR2) RETURN RAW Is
        l_text       VARCHAR2(32767) := p_text;
        l_encrypted  RAW(32767);
      BEGIN
        padstring(l_text);
        DBMS_OBFUSCATION_TOOLKIT.desencrypt(input          => UTL_RAW.cast_to_raw(l_text),
                                            Key            => g_key,
                                            encrypted_data => l_encrypted);
        RETURN l_encrypted;
      END;
    
      FUNCTION decrypt (p_raw  In  RAW) RETURN VARCHAR2 Is
        l_decrypted  VARCHAR2(32767);
      BEGIN
        DBMS_OBFUSCATION_TOOLKIT.desdecrypt(input => p_raw,
                                            Key   => g_key,
                                            decrypted_data => l_decrypted);
                                            
        RETURN Rtrim(UTL_RAW.cast_to_varchar2(l_decrypted), g_pad_chr);
      END;
    
      PROCEDURE padstring (p_text  In OUT  VARCHAR2) Is
        l_units  NUMBER;
      BEGIN
        IF Length(p_text) Mod 8 > 0 Then
          l_units := Trunc(Length(p_text)/8) + 1;
          p_text  := Rpad(p_text, l_units * 8, g_pad_chr);
        END IF;
      END;
    
    END Toolkit;
    /

    1. データベースの歴史

    2. SQLで複数のテーブルを結合する

    3. SQLクエリで正規表現(置換)を実行する

    4. SQLServerデータベース内のシステムテーブルの数をカウントする3つの方法