Пакетът DBMS_CRYPTO е правилният пакет за генериране на хешове. Не се предоставя на PUBLIC по подразбиране, ще трябва да го предоставите специално (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Резултатът от тази функция е от тип данни RAW
. Можете да го съхранявате в RAW
колона или го преобразувайте в VARCHAR2
използвайки RAWTOHEX
или UTL_ENCODE.BASE64_ENCODE
функции.
HASH
функцията е претоварена, за да приеме три типа данни като вход:RAW
, CLOB
и BLOB
. Поради правилата за имплицитно преобразуване, ако използвате VARCHAR2
като вход, Oracle ще се опита да го преобразува в RAW
и най-вероятно ще се провали, тъй като това преобразуване работи само с шестнадесетични низове.
Ако използвате VARCHAR2
след това трябва да преобразувате входа в двоичен тип данни или CLOB
, например :
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;
ще намерите допълнителна информация в документацията на DBMS_CRYPTO.hash