Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да криптирате данни в Oracle с помощта на PL SQL

Прост и защитен начин за криптиране и декриптиране на данни в Oracle с пакет DBMS_OBFUSCATION_TOOLKIT. DBMS_OBFUSCATION_TOOLKIT позволява на приложение да криптира данни, използвайки стандарта за криптиране на данни (DES) или алгоритмите Triple DES. По-долу е примерът за пакетирана от база данни функция за криптиране на данни в Oracle с помощта на PL SQL.

Следният пакет 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Започване на блогове за HTML5 и CSS3

  2. проблем с функцията to_date със sysdate

  3. Какво означава символът SQL Select || означава?

  4. Oracle:SQL заявка за намиране на всички тригери, принадлежащи към таблиците?

  5. listnagg функция?