sql >> Database >  >> RDS >> Oracle

Gegevens versleutelen in Oracle met PL SQL

Een eenvoudige en beveiligde manier om gegevens in Oracle te coderen en te decoderen met het pakket DBMS_OBFUSCATION_TOOLKIT. Met DBMS_OBFUSCATION_TOOLKIT kan een toepassing gegevens versleutelen met behulp van de Data Encryption Standard (DES) of de Triple DES-algoritmen. Hieronder vindt u het voorbeeld van de in een database verpakte functie om gegevens in Oracle te coderen met behulp van PL SQL.

Het volgende Toolkit-pakket gebruikt het DBMS_OBFUSCATION_TOOLKIT-pakket om gegevens te coderen en te decoderen.

Opmerking:u moet de sleutel die in dit pakket is gedefinieerd, wijzigen om uw aangepaste geheime versleutelingsmethode te hebben. De gegevens zijn versleuteld met de sleutel en kunnen alleen met die sleutel worden ontsleuteld. Meer informatie...

Gebruik om gegevens in Oracle te versleutelen:

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

Gegevens decoderen:

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. Optimistisch versus pessimistisch vergrendelen

  2. SQL-server negeer hoofdletters in een waar-expressie

  3. Zoek of getal is opgenomen in een uitdrukking zoals:1-3,5,10-15,20

  4. hoe variabele van shellscript door te geven aan sqlplus