Gói DBMS_CRYPTO là gói chính xác để tạo băm. Nó không được cấp cho PUBLIC theo mặc định, bạn sẽ phải cấp nó cụ thể (GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1
).
Kết quả của hàm này là kiểu dữ liệu RAW
. Bạn có thể lưu trữ nó dưới dạng RAW
hoặc chuyển đổi nó thành VARCHAR2
sử dụng RAWTOHEX
hoặc UTL_ENCODE.BASE64_ENCODE
các chức năng.
HASH
hàm bị quá tải để chấp nhận ba kiểu dữ liệu làm đầu vào:RAW
, CLOB
và BLOB
. Do các quy tắc chuyển đổi ngầm định, nếu bạn sử dụng VARCHAR2
như đầu vào, Oracle sẽ cố gắng chuyển đổi nó thành RAW
và rất có thể sẽ không thành công vì chuyển đổi này chỉ hoạt động với các chuỗi thập lục phân.
Nếu bạn sử dụng VARCHAR2
sau đó, bạn cần chuyển đổi đầu vào thành kiểu dữ liệu nhị phân hoặc CLOB
, ví dụ:
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;
bạn sẽ tìm thấy thông tin bổ sung trong tài liệu của DBMS_CRYPTO.hash