************TO EXECUTE the Package*****************
DECLARE
l_value VARCHAR2 (50) := 'ORACLE-BASE';
l_raw RAW (50);
BEGIN
DBMS_OUTPUT.put_line ('L_Value : ' || l_value);
l_raw := toolkit.encrypt_data (l_value);
DBMS_OUTPUT.put_line ('Encrypted Data : ' || l_raw);
DBMS_OUTPUT.put_line ('Decrypted Data: ' || toolkit.decrypt_data (l_raw));
END;
**************Package******************************
CREATE OR REPLACE PACKAGE toolkit
AS
/******************************************************************************
NAME: Toolkit
PURPOSE: Encripting And Decritping Of Data
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 02.11.2011 1. Created this package.
******************************************************************************/
FUNCTION encrypt_data (p_text IN VARCHAR2)
RETURN RAW;
FUNCTION decrypt_data (p_raw IN RAW)
RETURN VARCHAR2;
END toolkit;
/
CREATE OR REPLACE PACKAGE BODY toolkit
AS
/******************************************************************************
NAME: ToolKit
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 02.11.2011 1. Created this package body.
******************************************************************************/
g_key RAW (32767) := UTL_RAW.cast_to_raw (' 12345678 ');
g_pad_chr VARCHAR2 (1) := '~';
PROCEDURE padstring (p_text IN OUT VARCHAR2);
FUNCTION encrypt_data (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_data (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;
/