Oracle
 sql >> Database >  >> RDS >> Oracle

Fare uno sha1-hash di una riga in Oracle

Il pacchetto DBMS_CRYPTO è il pacchetto corretto per generare hash. Non è concesso a PUBLIC per impostazione predefinita, dovrai concederlo in modo specifico (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1 ).

Il risultato di questa funzione è di tipo dati RAW . Puoi salvarlo in un RAW colonna o convertilo in VARCHAR2 utilizzando il RAWTOHEX o UTL_ENCODE.BASE64_ENCODE funzioni.

Il HASH la funzione è sovraccaricata per accettare tre tipi di dati come input:RAW , CLOB e BLOB . A causa delle regole di conversione implicita, se utilizzi un VARCHAR2 come input, Oracle proverà a convertirlo in RAW e molto probabilmente fallirà poiché questa conversione funziona solo con stringhe esadecimali.

Se usi VARCHAR2 quindi, devi convertire l'input in un tipo di dati binario o in un CLOB , ad esempio :

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;

troverai ulteriori informazioni nella documentazione di DBMS_CRYPTO.hash