El paquete DBMS_CRYPTO nos permite generar hash de una cadena de texto utilizando distintos algoritmos como MD4, MD5 y SHA1. Pero si queremos generar un hash mediante SHA-256, SHA-384 o SHA-512 tenemos que apoyarnos en Java. Los siguientes bloques de código incorporan la posibilidad de generar estos hash desde SQL o PL/SQL.
Los algoritmos disponibles son los siguientes:
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
El primer paso es crear la clase Java que nos permita generar hash más complejos y compilarla en la base de datos:
create or replace and compile java source named encoder as
package com.test;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import sun.misc.BASE64Encoder;
public class Encoder {
public static String encode(String message, String algorithm) {
String encodedMessage;
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
byte[] hash = messageDigest.digest(message.getBytes("UTF-8"));
encodedMessage = (new BASE64Encoder()).encode(hash);
} catch (Exception e) {
encodedMessage = null;
}
return encodedMessage;
}
}
Una vez compilada la clase Java en nuestra base de datos, es necesario crear una función PL/SQL de enlace para poder invocar la clase desde una sentencia SQL o desde código PL/SQL:
create or replace function encoder(p_string in varchar2,
p_algorithm in varchar2) return varchar2 as
language java name 'com.test.Encoder.encode(java.lang.String, java.lang.String) return String';
Por último, un ejemplo de uso:
select Encoder('Hello', 'SHA-256') "hash_Hello",
Encoder('HELLO', 'SHA-256') "hash_HELLO"
from dual;
hash_Hello
--------------------------------------------
GF+NsyJx/iX1Yab8k4suJkMG7DBO2lGAB9F2SCY4GWk=
hash_HELLO
--------------------------------------------
NzPNl3/46xi5hzV+Is7Zn0YJfzHssjnoeK5jdg6D5NU=
Ver también Generar SH1 de una cadena y Generar el HASH de una cadena
Me gusta esto:
Me gusta Cargando...