MD5 dans Oracle (DBMS_OBFUSCATION_TOOLKIT.MD5)

Je suis en train de composer une fonction pour obtenir des hachages MD5 à partir de morceaux que j'ai glanées ici et là. Je veux obtenir le bas-de-casse représentation hexadécimale de la valeur de hachage. J'ai jusqu'à présent:

CREATE OR REPLACE FUNCTION MD5 (
    CADENA IN VARCHAR2
) RETURN DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
AS
BEGIN
    RETURN LOWER(
        RAWTOHEX(
            UTL_RAW.CAST_TO_RAW(
                DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => CADENA)
            )
        )
    );
END;

Je ne suis pas sûr que le type de retour de la fonction. DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM ressemble le choix approprié et aussi loin que je peux dire qu'il fonctionne comme prévu, mais la définition de package pour dbms_obfuscation_toolkit affiché par SQL Developer montre ceci:

SUBTYPE varchar2_checksum IS VARCHAR2(16);

La sortie a 32 caractères donc je dois être en train de faire quelque chose de mal. Mes questions:

  • Quel est le type correct pour le RETURN déclaration?
  • Suis-je inutile de conversions pour calculer la valeur de hachage?
C'est un des cas où je souhaiterais avoir pour être en mesure d'accepter deux réponses...

OriginalL'auteur | 2011-05-05