Oracle
 sql >> Base de données >  >> RDS >> Oracle

Faire un hachage sha1 d'une ligne dans Oracle

Le package DBMS_CRYPTO est le package correct pour générer des hachages. Il n'est pas accordé à PUBLIC par défaut, vous devrez l'accorder spécifiquement (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1 ).

Le résultat de cette fonction est de type RAW . Vous pouvez le stocker dans un RAW colonne ou convertissez-la en VARCHAR2 en utilisant le RAWTOHEX ou UTL_ENCODE.BASE64_ENCODE fonctions.

Le HASH la fonction est surchargée pour accepter trois types de données en entrée :RAW , CLOB et BLOB . En raison des règles de conversion implicite, si vous utilisez un VARCHAR2 en entrée, Oracle essaiera de le convertir en RAW et échouera très probablement puisque cette conversion ne fonctionne qu'avec des chaînes hexadécimales.

Si vous utilisez VARCHAR2 ensuite, vous devez convertir l'entrée en un type de données binaire ou un CLOB , par exemple :

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;

vous trouverez des informations complémentaires dans la documentation de DBMS_CRYPTO.hash