paquete para encriptar y desencriptar datos en oracle
Para ejecutar el paquete:
--Actualizar la columna con el valor encriptado
update tabla set Columna_varchar=PKG_ENCRIPTAR.ENCRIPTA(Columna_varchar)
where Columna_varchar is not null;
commit;
SELECT CONSECUTIVO, PKG_ENCRIPTAR.DESENCRIPTA(Columna_varchar)
FROM tabla;
--Revisar los datos
select * from tabla;
--codigo del paquete
create or replace PACKAGE pkg_encriptar
AS
FUNCTION cipher_type RETURN PLS_INTEGER;
FUNCTION encripta (input_string IN varchar2) RETURN raw;
FUNCTION desencripta (encrypted_raw IN raw) RETURN varchar2;
END pkg_encriptar;
create or replace PACKAGE BODY pkg_encriptar
AS
ctype CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
FUNCTION cipher_type RETURN PLS_INTEGER
IS
BEGIN
RETURN ctype;
END;
FUNCTION encripta (input_string IN varchar2) RETURN raw
IS
output_string VARCHAR2 (4000);
encrypted_raw RAW (4000); -- stores encrypted binary text
BEGIN
encrypted_raw := DBMS_CRYPTO.ENCRYPT
(
src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
typ => ctype,
key => UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))
);
RETURN encrypted_raw;
END;
FUNCTION desencripta (encrypted_raw IN raw) RETURN varchar2
IS
output_string VARCHAR2 (4000);
decrypted_raw RAW (4000); -- stores decrypted binary text
v_error varchar2(4000):=null;
BEGIN
decrypted_raw := DBMS_CRYPTO.DECRYPT
(
src => encrypted_raw,
typ => ctype,
key => UTL_ENCODE.BASE64_DECODE(UTL_I18N.STRING_TO_RAW('pMV3D4xhyfNxp3YyfLWzAErGcKkIjK3X6uc/WIeVTls=', 'AL32UTF8'))
);
output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
RETURN output_string;
exception
when others then
v_error:= SQLCODE || ' - ' || SUBSTR (SQLERRM, 1, 1000);
DBMS_OUTPUT.PUT_LINE ('Error ' || v_error);
END;
END pkg_encriptar;