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

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:

Dentro de función tendría el siguiente código:
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:

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

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:

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

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:

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

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 :

Dentro de función tendría el siguiente código:
6.DEMOSTRACIÓN FINAL
En esa prueba podremos ver el llamado de las funciones/procedimientos previamente mencionados y su respectiva validaciones

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!!