Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Einen Sha1-Hash einer Zeile in Oracle erstellen

Das Paket DBMS_CRYPTO ist das richtige Paket zum Generieren von Hashes. Es wird PUBLIC standardmäßig nicht gewährt, Sie müssen es speziell gewähren (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1 ).

Das Ergebnis dieser Funktion ist vom Datentyp RAW . Sie können es in einem RAW speichern -Spalte oder wandeln Sie sie in VARCHAR2 um mit dem RAWTOHEX oder UTL_ENCODE.BASE64_ENCODE Funktionen.

Der HASH Die Funktion ist überladen, um drei Datentypen als Eingabe zu akzeptieren:RAW , CLOB und BLOB . Aufgrund der Regeln der impliziten Konvertierung, wenn Sie einen VARCHAR2 verwenden Als Eingabe wird Oracle versuchen, sie in RAW zu konvertieren und wird höchstwahrscheinlich fehlschlagen, da diese Konvertierung nur mit hexadezimalen Zeichenketten funktioniert.

Wenn Sie VARCHAR2 verwenden dann müssen Sie die Eingabe in einen binären Datentyp oder ein CLOB konvertieren , zum Beispiel :

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;

weitere Informationen finden Sie in der Dokumentation von DBMS_CRYPTO.hash