Archivo de la categoría: General

Oracle Day 2014 Madrid – Disrupción

En el encuentro Oracle Day 2014 de Madrid se han repasado las distintas tecnologías que en estos momentos están produciendo un cambio de paradigma en la forma que tienen las empresas de trabajar y en la relación que tradicionalmente establecían los distintos actores del mercado. Estas tecnologías han ido creciendo en los últimos años a gran velocidad y en estos momentos ya nos encontramos inmersos en sus efectos. Son las tecnologías que, en la jerga del sector, se denominan IoT (Internet of Things), BigData, Cloud y Movilidad.

La información siempre ha estado ahí, junto a nosotros, pero es ahora cuando empezamos a tener:

  • IoT y BigData: Las herramientas que nos permiten capturar datos de múltiples fuentes.
  • Cloud: Almacenarlos y procesarlos a un coste asumible.
  • Movilidad: Para convertirlos en información que podamos ofrecer de manera sencilla al usuario final allí donde sea necesaria.
Anuncios
Enlace

Oracle Day 2014 - Madrid

Oracle Day 2014 – Madrid.

Generar SHA de una cadena (PL/SQL + Java)

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

Bienvenida

Este sitio pretende ofrecer comentarios, ejemplos y anécdotas en torno al diseño y programación de bases de datos Oracle. También se va a reservar un espacio dedicado a APEX, dada la potencia que aporta a estas bases de datos.

Pronto estaremos con ustedes.