sql >> Base de Datos >  >> RDS >> Oracle

Haciendo un sha1-hash de una fila en Oracle

El paquete DBMS_CRYPTO es el paquete correcto para generar hashes. No se otorga a PUBLIC de forma predeterminada, deberá otorgarlo específicamente (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1 ).

El resultado de esta función es de tipo de datos RAW . Puedes almacenarlo en un RAW columna o convertirlo a VARCHAR2 usando el RAWTOHEX o UTL_ENCODE.BASE64_ENCODE funciones.

El HASH la función está sobrecargada para aceptar tres tipos de datos como entrada:RAW , CLOB y BLOB . Debido a las reglas de conversión implícita, si usa un VARCHAR2 como entrada, Oracle intentará convertirlo a RAW y lo más probable es que falle, ya que esta conversión solo funciona con cadenas hexadecimales.

Si usa VARCHAR2 luego, debe convertir la entrada a un tipo de datos binario o un CLOB , por ejemplo:

DECLARE
   x RAW(20);
BEGIN
   SELECT sys.dbms_crypto.hash(utl_raw.cast_to_raw(col1||col2||to_char(col3)), 
                               sys.dbms_crypto.hash_sh1) 
     INTO x 
     FROM t;
END;

encontrará información adicional en la documentación de DBMS_CRYPTO.hash