En en blog anterior DBMS_CRYPTO Hashing y capacidades de cifrado(Parte 1 -Conceptos Teóricos) vimos los conceptos teóricos básicos que relacionados al paquete DBMS_CRYPTO, en esta parte nos centraremos en un enfoque mas practico y orientado al desarrollador, a continuación se listaran las excepciones y los diferentes algoritmos de cifrado y funciones hash que posee el esta utilidad, las cuales son:

 

FUNCIONES HASH CRIPTOGRÁFICAS

  • HASH_MD4 :Produce un hash de 128 bits, o compendio de mensaje del mensaje de entrada
  • HASH_MD5 :También produce un hash de 128 bits, pero es más complejo de lo que MD4
  • HASH_SH1: Secure Hash Algorithm (SHA). Produce un hash de 160 bits.

ALGORITMOS DE CIFRADO

Son los tipos de algoritmos que maneja el proceso de cifrado

  • ENCRYPT_DES :Data Encryption Standard. Bloques de cifrado. Utiliza longitud de clave de 56 bits.
  • ENCRYPT_3DES_2KEY :Data Encryption Standard. Bloques de cifrado. Funciona con un bloque de 3 veces con 2 llaves. la longitud efectiva de la clave de 112 bits.
  • ENCRYPT_3DES:Data Encryption Standard. Bloques de cifrado. Funciona con un bloque de 3 veces.
  • ENCRYPT_AES128:Norma de codificación avanzada. Bloques de cifrado. Utiliza tamaño de clave de 128 bits.
  • ENCRYPT_AES192:Norma de codificación avanzada. Bloques de cifrado. Utiliza tamaño de clave de 192 bits.
  • ENCRYPT_AES256:Norma de codificación avanzada. Bloques de cifrado. Utiliza tamaño de clave de 256 bits.
  • ENCRYPT_RC4 :Cifrado de flujo. Utiliza un secreto, generado de forma aleatoria clave única para cada sesión.

SUITE DE CIFRADO

  • DES_CBC_PKCS5 :ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5
  • DES3_CBC_PKCS5 :ENCRYPT_3DES +CHAIN_CBC + PAD_PKCS5

EXCEPCIONES

00_excepciones

DEMOSTRACIÓN

A continuación se listara un ejemplo de cada tipo de función y su respectiva explicación, antes de iniciar debemos tener en cuenta:

  • Validar si el usuario donde se va a realizar la prueba tiene permisos de ejecución sobre el paquete, si no lo tiene se le debe asignar el permiso con esta instrucción GRANT EXECUTE ON DBMS_CRYPTO TO <USER>;
  • Para convertir de RAW a VARCHAR se debe realizar por medio de casteo(Solo aplica para desencripción), se puede utilizar las funciones UTL_I18N.STRING_TO_RAW ó UTL_RAW.CAST_TO_VARCHAR2

1.FUNCIÓN ENCRYPT

Para la prueba funcional crearemos una función  con el nombre definida por usted mism@ donde reciba un argumento de tipo VARCHAR2 y retorne un valor tipo RAW. La estructura de la función es la siguiente:

01_estructuraencrypt

Dentro de función tendría el siguiente código:02_encriptacion

En el interior se observa lo siguiente

  • Variables que se utilizaran en el proceso
  • Metodo de encriptación a realizar
  • Casteo del valor y la clave(key) a tipo RAW
  • Encriptación de del valor
  • Sección de Excepciones

2.FUNCIÓN DECRYPT

Para la prueba funcional crearemos una función  con el nombre definida por usted mism@ donde reciba un argumento de tipo RAW y retorne un valor tipo VARCHAR2. La estructura de la función es la siguiente:

02_estructurasdecrip

Dentro de función tendría el siguiente código:

03_desencriptar

En el interior se observa lo siguiente

  • Variables que se utilizaran en el proceso
  • Metodo de encriptación a realizar
  • Casteo del valor y la clave(key) a tipo RAW
  • Desencriptación de del valor
  • Sección de Excepciones

3.FUNCIÓN HASH

Para la prueba funcional crearemos una función  con el nombre definida por usted mism@ donde reciba un argumento de tipo VARCHAR2 y retorne un valor tipo Raw. La estructura de la función es la siguiente:

05_hash

Dentro de función tendría el siguiente código:

06_funcioneshash

En el interior se observa lo siguiente

  • Variables que se utilizaran en el proceso
  • Metodo de HASH a utilizar
  • Generación de HASH
  • Sección de Excepciones

4.FUNCIÓN MAC

La funcipon MAC es muy parecida a la función HASH,  la diferente es que para generar el HASH lo realiza por medio de una llave, para la prueba funcional crearemos una función  con el nombre definida por usted mism@ donde reciba un argumento de tipo VARCHAR2 y retorne un valor tipo Raw. La estructura de la función es la siguiente:

06_estructuramac

Dentro de función tendría el siguiente código:

08_mac

En el interior se observa lo siguiente

  • Variables que se utilizaran en el proceso
  • Metodo de HASH a utilizar
  • Generación de HASH
  • Sección de Excepciones

5.FUNCIONES RANDOM

Para la prueba funcional crearemos un procedimiento con el nombre definida por usted mism@ donde tendrá 3 parametros OUT :

09_random

Dentro de función tendría el siguiente código:10_random

6.DEMOSTRACIÓN FINAL

En esa prueba podremos ver el llamado de las funciones/procedimientos previamente mencionados y su respectiva validaciones

11_prueba_general

Como podemos ver, este paquete de Oracle es bastante útil y nos pueden ayudar a mejorar la seguridad en nuestras aplicaciones.

Links Referencia

https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_crypto.htm#i1004384

https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_raw.htm#BABJHEGF

No vemos en la próxima!!