Cifrar texto usando MD5 en PL SQL

MD5 (Algoritmo de Resumen del Mensaje 5) es un algoritmo de cifrado de 128 relativamente seguro. Una codificación de MD5 es generalmente un número de 32 dígitos hexadecimal.

En PL/SQL podemos cifrar cadenas de texto usando la función DBMS_OBFUSCATION_TOOLKIT.MD5 de esta forma:

PLSQL:
  1. cifrado_raw   VARCHAR2(100);
  2. texto_cifrado VARCHAR2(100);
  3. --Se obtiene un texto cifrado en "crudo"
  4. cifrado_raw := DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => 'cadena a cifrar');
  5. --Se transforma a un número hexadecimal  en minúsculas
  6. SELECT LOWER(RAWTOHEX(cifrado_raw)) INTO texto_cifrado FROM dual;
  7. DBMS_OUTPUT.put_line('texto_cifrado '||texto_cifrado);
  8. END;

3 Comentarios

  1. C#ristian
    Comentado julio 13, 2010 a las 9:09 am | Permalink

    Qué tal, me sirvió muchísimo tu código, solo que lo modifiqué y lo hice como una función, para poder utilizarlo en query’s, procedimientos almacenados, triggers, etc.

    CREATE OR REPLACE FUNCTION ENCRIPTAR(ptexto VARCHAR2) RETURN VARCHAR2 IS
    cifrado_raw VARCHAR2(100);
    texto_cifrado VARCHAR2(100);
    BEGIN
    cifrado_raw := DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => ptexto);
    SELECT RAWTOHEX(cifrado_raw) INTO texto_cifrado FROM dual;
    return texto_cifrado;
    END ENCRIPTAR;

    Algo así:
    select encriptar(usu_psw), usu_id from t_usuario;

  2. C#ristian
    Comentado julio 13, 2010 a las 12:04 pm | Permalink

    Hay alguna forma de desencriptar ese texto encriptado anteriormente?

    Por ejemplo, la funcion anterior en este query:

    select ENCRIPTAR(‘prueba’) from dual

    devuelve C893BAD68927B457DBED39460E6AFD62
    pero yo quiero que una vez este dato esté almacenado, poder recuperar la cadena ‘prueba’.

    ¿Es posible?
    Por que yo hice otras 2 funciones pero con otros algoritmos (DBMS_CRYPTO.des_cbc_pkcs5), el problema es que las cadenas resultantes se hacen demasiado largas.

  3. Comentado julio 18, 2010 a las 11:27 am | Permalink

    Gracias por el aporte C#ristian,

    Puedes ver info sobre lo que preguntas acá

    http://www.databasejournal.com/features/oracle/article.php/3358671/Decrypting-Oracles-DBMSOBFUSCATIONTOOLKIT.htm

CC 2009 El Módem. Some rights reserved.