Encriptar varchar en oracle

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;

Deja un comentario