Tuesday, November 3, 2009

Encyption and Decryption in Oracle

Oracle provides standard Encyption and Decryption with it's dbms_obfuscation_toolkit package.
Here is a sample code which shows how to use it.

DECLARE
input_string VARCHAR2(32) := 'this1234password';
raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);

key_string VARCHAR2(8) := 'vinayjos';
raw_key RAW(128) := UTL_RAW.CAST_TO_RAW(key_string);

encrypted_raw RAW(2048);
encrypted_string VARCHAR2(2048);

decrypted_raw RAW(2048);
decrypted_string VARCHAR2(2048);

error_in_input_buffer_length EXCEPTION;
PRAGMA EXCEPTION_INIT(error_in_input_buffer_length, -28232);
INPUT_BUFFER_LENGTH_ERR_MSG VARCHAR2(100) :=
'*** DES INPUT BUFFER NOT A MULTIPLE OF 8 BYTES - IGNORING EXCEPTION ***';

BEGIN
dbms_output.put_line('> ========= BEGIN TEST RAW DATA =========');
dbms_output.put_line('> Raw input : ' ||
UTL_RAW.CAST_TO_VARCHAR2(raw_input));
BEGIN
dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,
key => raw_key, encrypted_data => encrypted_raw );

dbms_output.put_line('> encrypted hex value : ' ||
rawtohex(encrypted_raw));

dbms_obfuscation_toolkit.DESDecrypt(input => encrypted_raw,
key => raw_key, decrypted_data => decrypted_raw);

dbms_output.put_line('> Decrypted raw output : ' ||
UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw));

dbms_output.put_line('> ');

if UTL_RAW.CAST_TO_VARCHAR2(raw_input) =
UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw) THEN
dbms_output.put_line('> Raw DES Encyption and Decryption successful');
END if;

EXCEPTION
WHEN error_in_input_buffer_length THEN
dbms_output.put_line('> ' || INPUT_BUFFER_LENGTH_ERR_MSG);
END;
dbms_output.put_line('> ');
END;
/

No comments:

Post a Comment