Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So verschlüsseln Sie Daten in Oracle mit PL SQL

Eine einfache und sichere Methode zum Verschlüsseln und Entschlüsseln von Daten in Oracle mit dem DBMS_OBFUSCATION_TOOLKIT-Paket. DBMS_OBFUSCATION_TOOLKIT ermöglicht es einer Anwendung, Daten entweder mit dem Data Encryption Standard (DES) oder den Triple DES-Algorithmen zu verschlüsseln. Unten ist das Beispiel einer datenbankgepackten Funktion zum Verschlüsseln von Daten in Oracle mit PL SQL.

Das folgende Toolkit-Paket verwendet das DBMS_OBFUSCATION_TOOLKIT-Paket zum Verschlüsseln und Entschlüsseln von Daten.

Hinweis:Sie müssen den in diesem Paket definierten Schlüssel ändern, um Ihre benutzerdefinierte geheime Verschlüsselungsmethode zu erhalten. Die mit dem Schlüssel verschlüsselten Daten können nur mit diesem Schlüssel entschlüsselt werden. Mehr erfahren...

Verwendung zum Verschlüsseln von Daten in Oracle:

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

So entschlüsseln Sie Daten:

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;
/