Thursday, September 4, 2008

Script to Encrypt and Decrypt using PL/SQL

CREATE OR REPLACE PACKAGE XX_PASSWORD AS
function encrypt(i_password varchar2) return varchar2;
function decrypt(i_password varchar2) return varchar2;
END XX_PASSWORD;
/
show errors


CREATE OR REPLACE PACKAGE BODY XX_PASSWORD AS

-- key must be exactly 8 bytes long
c_encrypt_key varchar2(8) := 'key45678';

function encrypt (i_password varchar2) return varchar2 is
v_encrypted_val varchar2(38);
v_data varchar2(38);
begin
-- Input data must have a length divisible by eight
v_data := RPAD(i_password,(TRUNC(LENGTH(i_password)/8)+1)*8,CHR(0));

DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT(
input_string => v_data,
key_string => c_encrypt_key,
encrypted_string => v_encrypted_val);
return v_encrypted_val;
end encrypt;

function decrypt (i_password varchar2) return varchar2 is
v_decrypted_val varchar2(38);
begin
DBMS_OBFUSCATION_TOOLKIT.DESDECRYPT(
input_string => i_password,
key_string => c_encrypt_key,
decrypted_string => v_decrypted_val);
return v_decrypted_val;
end decrypt;


end XX_PASSWORD;
/
show errors

-- Test if it is working...
select xx_password.encrypt('PASSWORD1') from dual;
select xx_password.decrypt(app_password.encrypt('PASSWORD1')) from dual;
select xx_password.encrypt('PSW2') from dual;
select xx_password.decrypt(app_password.encrypt('PSW2')) from dual;

No comments: