Una forma simple y segura de cifrar y descifrar datos en Oracle con el paquete DBMS_OBFUSCATION_TOOLKIT. DBMS_OBFUSCATION_TOOLKIT permite que una aplicación cifre datos utilizando el estándar de cifrado de datos (DES) o los algoritmos Triple DES. A continuación se muestra el ejemplo de la función empaquetada de la base de datos para cifrar datos en Oracle usando PL SQL.
El siguiente paquete de herramientas utiliza el paquete DBMS_OBFUSCATION_TOOLKIT para cifrar y descifrar datos.
Nota:debe modificar la clave definida en este paquete para tener su método de cifrado secreto personalizado. Los datos están cifrados por la clave y solo se pueden descifrar con esa clave. Más información...
Uso para cifrar datos en Oracle:
Select toolkit.encrypt('The test data 123.') From Dual;
Shows: ----------- 5C8ADD7B98919FC937A53AB986782EA9EE63D4ADDF7CA322
Para descifrar datos:
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; /