CREATE OR REPLACE PACKAGE pkg_test IS FUNCTION encrypt ( input_string IN VARCHAR2 , key_data IN VARCHAR2 := '1122334455667788' ) RETURN RAW;
FUNCTION decrypt ( input_string IN VARCHAR2 , key_data IN VARCHAR2 := '1122334455667788' ) RETURN VARCHAR2;
END pkg_test;
CREATE OR REPLACE PACKAGE BODY pkg_test IS SQLERRMSG VARCHAR2(255); SQLERRCDE NUMBER;
FUNCTION encrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '1122334455667788') RETURN RAW IS key_data_raw RAW(128); input_string_raw RAW(128); encrypted_raw RAW(2048);
BEGIN input_string_raw := UTL_RAW.CAST_TO_RAW(input_string); key_data_raw := UTL_RAW.CAST_TO_RAW(key_data);
FUNCTION decrypt (input_string IN VARCHAR2 , key_data IN VARCHAR2 := '1122334455667788') RETURN VARCHAR2 IS converted_string VARCHAR2(48); key_data_raw RAW(128); decrypted_raw VARCHAR2(2048);
BEGIN key_data_raw := UTL_RAW.CAST_TO_RAW(key_data);
insert into card_info values ( 1 , pkg_test.encrypt('1234567812345678')); insert into card_info values ( 2 , pkg_test.encrypt('1234567812345678', '0000111122223333')); commit;
select * from card_info;
select id, pkg_test.decrypt(card_number) card_number from card_info; select id, pkg_test.decrypt(card_number, '0000111122223333') card_number from card_info;
select * from card_info where card_number = '1234567812345678'; select * from card_info where card_number = utl_raw.cast_to_raw('1234567812345678'); select * from card_info where card_number = '365C80EABBC8859E91C4BDE4B3C52A4B'; select * from card_info where card_number = pkg_test.encrypt('1234567812345678');
drop package body pkg_test; drop package pkg_test; drop table card_info;